最近用了Set 的 toArray方法 首先我的Set种保存的是 String类型的数据,我想把这个Set转换为 String的数组,于是就用到Set 的toArray()方法:

  1. Set<String> set = new HashSet<String>();
  2. ........
  3. 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()相关推荐

  1. java stringtoarray_java中toArray()的用法

    一直不太熟悉toarray()的用法 现整理如下 一.Incident public static void main(String[] args) { List list = new ArrayLi ...

  2. 关于Arrays类中toArray方法的总结

    学了差不多两年的Java,数组类Arrays应该是我最常用到的类之一了,在整个学习的过程中,会更常用到一个方法,那就是toArray方法,因为将Collections类型的集合转化为数组后,将会更容易 ...

  3. List中toArray()的使用方法

    当我们需要把一个链表中的元素放入数组时,jdk给我们提供了一种方法,也即运用toArray(),方法的使用如下: public class Test {public static void main( ...

  4. 深入理解ArrayList中 toArray(),toArray(T[])方法

    在List类的具体实现类 ArrayList类中,有一个toArray()方法,该方法的作用是将ArrayList类型的对象转换为数组. 该类型有两个方法:1.toArray()  和 2. toAr ...

  5. java中toarray方法作用_toArray()方法有什么作用?

    ArrayList类的toArray()方法以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组.这充当了基于数组的API和基于集合的API之间的桥梁. 示例 import jav ...

  6. java中toarray()的 用法_java容器中toArray的用法

    请高手帮我看看toArray的用法其返回的是哈希码是不是需要重写importjava.util.*;publicclassTest1{publicstaticvoidmain(String[]args ...

  7. 13万字详细分析JDK中Stream的实现原理

    前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...

  8. 【JDK8 新特性 6】收集Stream流中的结果

    上一篇文章 : (9条消息) [JDK8 新特性 5]Stream流介绍和常用方法的使用_一切总会归于平淡的博客-CSDN博客 目录 1.Stream流中的结果到集合中 2.Stream流中的结果到数 ...

  9. 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

最新文章

  1. Oracle学习笔记十三 触发器
  2. 安卓无需root权限小黄鸟抓包教程
  3. Android安全加密:消息摘要Message Digest
  4. mysql 字段相同条数_用sql语句统计数据库某个字段中相同的数据有多少条?
  5. C语言学习之输入10个数,输出其中最大的一个数。
  6. 【专场福利Part2】从多维度出发 保障提升实时音视频质量
  7. 网络串流_串流NFL足球的最便宜方式(无需电缆)
  8. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...
  9. linux下kill指令默认信号,Linux基础命令之kill命令
  10. java 短路判断_细数Java最坑爹的10大功能点
  11. 中英文对照 —— 数学
  12. Ubuntu下Arm-Linux-GCC交叉编译环境的搭建
  13. Android 学习笔记(十五) Activity-GalleryView
  14. kotlin android 开源,Kotlin开源项目集合
  15. MT【306】圆与椭圆公切线段
  16. Postman 批量执行请求
  17. HBase 分布式集群搭建手记
  18. [conda] 利用conda安装本地包
  19. PPT技能速成班学习笔记
  20. LAMP环境让php支持pdo_mysql

热门文章

  1. 讲的真详细!花三分钟看完这篇文章你就懂了
  2. 冷笑话 企鹅与北极熊
  3. sapjco3使用详解
  4. Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
  5. 微信的订阅号和服务号如何区分?
  6. 怎么用python抓取网页数据
  7. 敏捷实践不可忽略的环节
  8. 用keil如何编写c类型语言,keil怎么写程序
  9. Coursera华盛顿大学机器学习课程总结
  10. 从零开始之驱动发开、linux驱动(二十九、mmap原理)