集合转数组 toArray()方法
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()方法相关推荐
- 集合转数组toArray方法
现象 集合转数组toArray方法 方法: 1.直接使用 toArray方法 得到的是 Object[] 若强转其它类型数组将出现 ClassCastException 错误 2:使用使用集合的 to ...
- 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。
使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址:如果数组元素大于实际所需,下标为[ list.size() ]的数组 元素将 ...
- List转数组toArray方法
一.List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: Object[] toArray() ...
- 数组转集合集合转数组 split方法
1.使用原生方式,拆分数组,添加到List List<String> resultList = new ArrayList<>(array.length); for (Stri ...
- 集合转数组的toArray()和toArray(T[] a)方法
1.ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: (1)list.toArray(); (2) ...
- Java 集合转数组的toArray()和toArray(T[] a)方法通俗易懂
文章目录 1.ArrayList的toArray 2.采用set去重复数据,和set转array 3.总结 1.ArrayList的toArray ArrayList提供了一个将List转为数组的一个 ...
- Java中,集合与数组之间的相互转换
1. 集合转换为类型一致的数组 使用集合转数组的方法,必须使用集合的 toArray(T[] array)方法,传入的是类型完全一致.长度为 0 的空数组. 反例: 直接使用 toArray 无参方法 ...
- 集合和数组的正确转换方式(可能有你不知道的坑哦)
文章目录 一.集合转数组 二.数组转集合 1. Arrays.asList(): 2. 正确的转换方式: 一.集合转数组 <阿里巴巴 Java 开发手册>中写道:使用集合转数组的方法,必须 ...
- java 集合操作_Java 集合的操作 个人方法总结
一些小建议: 在使用集合的时候如果不太清楚需求我们可以像对列一样如下: Queue expres=new ArrayDeque<>(); 重新指定类型,来进行更换 Queue expres ...
最新文章
- 序列每天从1开始_时间序列预测一
- a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
- linux 当前用户执行定时任务
- 社区儿童计算机活动总结,寒假社区服务活动总结
- 【算法】剑指 Offer 47. 礼物的最大价值
- 简单的C#字符串数组转字符串方法
- 【干货】2021年重点行业薪酬趋势指南.pdf(附下载链接)
- 【软件测试】α测试和β测试的区别
- c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
- 12.TCP/IP 详解卷1 --- 广播和多播
- python实现mat格式数据解析处理,并转化为json格式数据
- Apache与Nginx服务器对比
- 洛谷P1600 天天爱跑步
- linux下打开.mpp文件(微软project).
- 使用中文预训练模型 bert-wwm 获得字向量和词向量
- Python 计时器(秒钟、秒表)
- 告别神秘客,人力成本节约90%,DuDuTalk工牌用AI帮你智慧巡店
- 黑暗主题导致iframe透明属性失效
- geohash 模块安装及使用(Anaconda.Python 2)
- COGS 827. [Tyvj Feb11] 网站计划