Set 中 toArray()
最近用了Set 的 toArray方法 首先我的Set种保存的是 String类型的数据,我想把这个Set转换为 String的数组,于是就用到Set 的toArray()方法:
- Set<String> set = new HashSet<String>();
- ........
- String[] strs = (String[]) set.toArray();
程序编译的时候很正常,当运行的时候却报了 ClassCastException,于是就纳闷了:
String 是 Object的子类,而 set.toArray() 返回的是一个Object数组,为什么就不能转换呢?
百思不得其解,于是搜了写资料,才终于弄明白了缘由。
第一点:String是一种类型, String[]是另一种类型,这是不同的概念。
Object可以强转为String(只要可以)不代表Object[]类型可以强转为String[]类型。
第二点:对于Set而言,它只知道它内部保存的是Object,所以默认情况下,toArray只能是返回一个由这些Object构成的Object数组出来。但程序的作者或许更清楚其内部元素的更具体的类型,因此,HashSet类提供了toArray的另一个重载版本,允许用户指定一种比Object[]更具体的数组类型,方法是传递一个用户想要的数组类型的一个数组实例进去,多长都无所谓(因此我们常常使用一个0长度的,毕竟把类型带进去就OK了),于是,toArray内部就会按照你想要的这种类型,给构造一个数组出来。这样构造出来的数组,当然是很安全地被调用者转换回那个实际的类型。
String 和String[]不是一种类型 ,不要犯想当然的错误。
Set 中 toArray()相关推荐
- java stringtoarray_java中toArray()的用法
一直不太熟悉toarray()的用法 现整理如下 一.Incident public static void main(String[] args) { List list = new ArrayLi ...
- 关于Arrays类中toArray方法的总结
学了差不多两年的Java,数组类Arrays应该是我最常用到的类之一了,在整个学习的过程中,会更常用到一个方法,那就是toArray方法,因为将Collections类型的集合转化为数组后,将会更容易 ...
- List中toArray()的使用方法
当我们需要把一个链表中的元素放入数组时,jdk给我们提供了一种方法,也即运用toArray(),方法的使用如下: public class Test {public static void main( ...
- 深入理解ArrayList中 toArray(),toArray(T[])方法
在List类的具体实现类 ArrayList类中,有一个toArray()方法,该方法的作用是将ArrayList类型的对象转换为数组. 该类型有两个方法:1.toArray() 和 2. toAr ...
- java中toarray方法作用_toArray()方法有什么作用?
ArrayList类的toArray()方法以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组.这充当了基于数组的API和基于集合的API之间的桥梁. 示例 import jav ...
- java中toarray()的 用法_java容器中toArray的用法
请高手帮我看看toArray的用法其返回的是哈希码是不是需要重写importjava.util.*;publicclassTest1{publicstaticvoidmain(String[]args ...
- 13万字详细分析JDK中Stream的实现原理
前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...
- 【JDK8 新特性 6】收集Stream流中的结果
上一篇文章 : (9条消息) [JDK8 新特性 5]Stream流介绍和常用方法的使用_一切总会归于平淡的博客-CSDN博客 目录 1.Stream流中的结果到集合中 2.Stream流中的结果到数 ...
- 深入理解List的toArray()方法和toArray(T[] a)方法
深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...
最新文章
- Oracle学习笔记十三 触发器
- 安卓无需root权限小黄鸟抓包教程
- Android安全加密:消息摘要Message Digest
- mysql 字段相同条数_用sql语句统计数据库某个字段中相同的数据有多少条?
- C语言学习之输入10个数,输出其中最大的一个数。
- 【专场福利Part2】从多维度出发 保障提升实时音视频质量
- 网络串流_串流NFL足球的最便宜方式(无需电缆)
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...
- linux下kill指令默认信号,Linux基础命令之kill命令
- java 短路判断_细数Java最坑爹的10大功能点
- 中英文对照 —— 数学
- Ubuntu下Arm-Linux-GCC交叉编译环境的搭建
- Android 学习笔记(十五) Activity-GalleryView
- kotlin android 开源,Kotlin开源项目集合
- MT【306】圆与椭圆公切线段
- Postman 批量执行请求
- HBase 分布式集群搭建手记
- [conda] 利用conda安装本地包
- PPT技能速成班学习笔记
- LAMP环境让php支持pdo_mysql