1ArrayList之toArray:
toArray有两个重载的方法:
(1)list.toArray();
(2)list.toArray(T[] a);
第一个是,将list直接转为Object[] 数组;
第二个,是将list转化为你所需要类型的数组,当然我们再用的时候会转化为与list内容相同的类型。
举个例子:

Collection<String> arr = new ArrayList<String>();arr.add("a");arr.add("b");arr.add("b");//可以添加重复的对象System.out.println(arr);String[] str = (String[])arr.toArray();//erro

运行结果如下:

[a, b, b]
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;at cn.wiztek.reiss.dy.service.impl.DyServiceImpl.main(DyServiceImpl.java:2242)

不能将Object[] 转化为String[],转化的话只能是取出每一个元素再转化。
只能这样:

   Collection<String> arr = new ArrayList<String>();arr.add("a");arr.add("b");arr.add("b");//可以添加重复的对象System.out.println(arr);Object[] o = arr.toArray();for (int i = 0; i < o.length; i++) {String e = (String) o[i];System.out.println(e);}

运行结果:

[a, b, b]
a
b
b

这说明用第一种方法是不太好使的,那我们用第二种方法试一下:

 Collection<String> arr = new ArrayList<String>();arr.add("a");arr.add("b");arr.add("b");//可以添加重复的对象System.out.println(arr);       String[] obj1 = arr.toArray(new String[arr.size()]);//第二种方法System.out.println(obj1);}

运行结果:

[a, b, b]
[Ljava.lang.String;@2429de03
关于这个一串,这样理解:
([:表示一维数组 。
[[:表示二维数组 。
L:表示一个对象 。
java.lang.String:表示对象的类型 。
@:后面表示该对象的hashCode。因此访问数组元素时,需要另外使用for循环遍历数组,不能直接通过数组名访问所有数组元素。)

如果觉得遍历很麻烦,可以重写toString方法(还是得写遍历啊!),代码附上:

public static String toString(Object o){if (o instanceof String){return String.valueOf(o);}else if (o instanceof  Object[]){String str = "";for (Object obj : (Object[])o){str +=String.valueOf(obj);}return str;}return "";}

运行 toString(obj1),得到结果是:

a, b, b]
abb

可以看出,不带参数的toArray()方法,是构造的一个Object数组,然后进行数据copy,此时进行转型就会产生ClassCastException
而带参数的toArray(T[] a) 方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object 数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常。
在复习一遍!
list.toArray();
String[] str = (String[])arr.toArray();//erro
会出错,会出错!

String[] str = arr.toArray( new String [arr.size] );
根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,
没问题。

记住了吗?

集合转数组 toArray()方法相关推荐

  1. 集合转数组toArray方法

    现象 集合转数组toArray方法 方法: 1.直接使用 toArray方法 得到的是 Object[] 若强转其它类型数组将出现 ClassCastException 错误 2:使用使用集合的 to ...

  2. 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。

    使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址:如果数组元素大于实际所需,下标为[ list.size() ]的数组 元素将 ...

  3. List转数组toArray方法

    一.List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法:  Object[] toArray()            ...

  4. 数组转集合集合转数组 split方法

    1.使用原生方式,拆分数组,添加到List List<String> resultList = new ArrayList<>(array.length); for (Stri ...

  5. 集合转数组的toArray()和toArray(T[] a)方法

    1.ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: (1)list.toArray(); (2) ...

  6. Java 集合转数组的toArray()和toArray(T[] a)方法通俗易懂

    文章目录 1.ArrayList的toArray 2.采用set去重复数据,和set转array 3.总结 1.ArrayList的toArray ArrayList提供了一个将List转为数组的一个 ...

  7. Java中,集合与数组之间的相互转换

    1. 集合转换为类型一致的数组 使用集合转数组的方法,必须使用集合的 toArray(T[] array)方法,传入的是类型完全一致.长度为 0 的空数组. 反例: 直接使用 toArray 无参方法 ...

  8. 集合和数组的正确转换方式(可能有你不知道的坑哦)

    文章目录 一.集合转数组 二.数组转集合 1. Arrays.asList(): 2. 正确的转换方式: 一.集合转数组 <阿里巴巴 Java 开发手册>中写道:使用集合转数组的方法,必须 ...

  9. java 集合操作_Java 集合的操作 个人方法总结

    一些小建议: 在使用集合的时候如果不太清楚需求我们可以像对列一样如下: Queue expres=new ArrayDeque<>(); 重新指定类型,来进行更换 Queue expres ...

最新文章

  1. 序列每天从1开始_时间序列预测一
  2. a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
  3. linux 当前用户执行定时任务
  4. 社区儿童计算机活动总结,寒假社区服务活动总结
  5. 【算法】剑指 Offer 47. 礼物的最大价值
  6. 简单的C#字符串数组转字符串方法
  7. 【干货】2021年重点行业薪酬趋势指南.pdf(附下载链接)
  8. 【软件测试】α测试和β测试的区别
  9. c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
  10. 12.TCP/IP 详解卷1 --- 广播和多播
  11. python实现mat格式数据解析处理,并转化为json格式数据
  12. Apache与Nginx服务器对比
  13. 洛谷P1600 天天爱跑步
  14. linux下打开.mpp文件(微软project).
  15. 使用中文预训练模型 bert-wwm 获得字向量和词向量
  16. Python 计时器(秒钟、秒表)
  17. 告别神秘客,人力成本节约90%,DuDuTalk工牌用AI帮你智慧巡店
  18. 黑暗主题导致iframe透明属性失效
  19. geohash 模块安装及使用(Anaconda.Python 2)
  20. COGS 827. [Tyvj Feb11] 网站计划

热门文章

  1. Hbase理论与操作
  2. 如何计算环境遗传相关 | 育种中的基因与环境互作
  3. 周末游重庆市唯一的世界文化遗产 - 大足石刻
  4. 架构设计本质-架构思维
  5. linux删除目录下文件|删除文件保持目录结构|各种删除方法总结
  6. pthread_create创建线程
  7. Linux专家心目中的最佳Linux发行版有哪些?
  8. 打怪小游戏(进度65%)
  9. net start mysql无法启动MySQL
  10. 【学习笔记】C++内存管理-侯捷