list和数组间的相互转换(Java)
前言
如果觉得文字太啰嗦直接看文章中的代码块也是完全没问题的。
list转数组
java中list集合转为数组的方法:
- 1、使用无参数toArray方法,语法格式“
Object[] toArray();
”; - 2、使用支持泛型的toArray方法,语法格式“
T[] toArray(T[] a);
”。
List转换成数组可以调用toArray方法,
这里有两个重载的方法,
一般使用第2个带泛型参数的方法:
Object[] toArray();<T> T[] toArray(T[] a);
无参数toArray方法
Object[] toArray();
这个方法将List直接转为Object[]数组。
Java初学者喜欢用这个方法,
没有参数使用起来很方便,
而且代码编译也没有报错,
错误使用的示例代码如下:
List<String> strList = new ArrayList<>();strList.add("list-a");strList.add("list-b");String[] strArray = (String[]) strList.toArray();
结果一运行,直接报错,
不能将Object[]转化为String[]:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
正确使用代码如下:
List<String> strList = new ArrayList<>();Object[] strArray = strList.toArray();
得到了一个通常情况下没啥用的Object[]。
支持泛型的toArray方法
<T> T[] toArray(T[] a);
这个方法接收一个类型为 T 的数组,
注意基本类型是不能作为泛型参数的。
如果是使用int[] 类型数组,
需要把 int[] 换成 Integer[] 。
使用的示例代码如下:
List<String> strList = new ArrayList<>();strList.add("list-a");strList.add("list-b");String[] strArray = strList.toArray(new String[strList.size()]);
toArray方法入参的数组大小
针对如下代码,
分析一下初始化的String数组的大小size,
和List的大小strList.size()的关系,
对于返回值产生的不同影响:
List<String> strList = new ArrayList<>();strList.add("list-a");strList.add("list-b");String[] strArray1 = new String[size];String[] strArray2 = strList.toArray(strArray1);
2.3.1.size < strList.size()
现在设置size=0,
小于strList.size()=2,
代码修改部分如下:
String[] strArray1 = new String[0];
返回的strArray2和strArray1不是同一个对象。
2.3.2.size = strList.size()
现在设置size=strList.size(),
代码修改部分如下:
String[] strArray1 = new String[strList.size()];
返回的strArray2和strArray1是同一个对象。
所以下面两块代码是等价的,
得到的strArray都是我们期望的结果:
String[] strArray = strList.toArray(new String[strList.size()]);String[] strArray = new String[strList.size()];strList.toArray(strArray);
2.3.3.size > strList.size()
现在设置size=strList.size()+1,
代码修改部分如下:
String[] strArray1 = new String[strList.size()+1];
返回的strArray2和strArray1是同一个对象,
但是数组的最后一个元素是null,
如果数组中的元素多于List中的元素,
列表复制完后紧接着的数组末尾被设置为null,
即strArray1[strList.size()]=null,
这对于调用方确定数组的真实长度很有用,
如果使用strList.size()+2初始化数组,
则数组的倒数第二个元素是null。
数组转list
java中将数组转为list集合的方法:
- 1、使用原生方式,使用for()循环来拆分数组,并添加到List中;
- 2、使用
Arrays.asList()
方法; - 3、使用
Collections.addAll()
方法; - 4、使用
List.of()
方法。
问题描述:对于给定的如下数组,如何转换成List集合?
String[] array = {"a","b","c"};
参考stackoverflow总结如下几种写法:
1.使用原生方式,拆分数组,添加到List
List<String> resultList = new ArrayList<>(array.length);
for (String s : array) {resultList.add(s);
}
2.使用Arrays.asList()
List<String> resultList= new ArrayList<>(Arrays.asList(array));
注意:调用Arrays.asList()时,其返回值类型是ArrayList,但此ArrayList是Array的内部类,调用add()时,会报错:java.lang.UnsupportedOperationException,并且结果会因为array的某个值的改变而改变,故需要再次构造一个新的ArrayList。
3.使用Collections.addAll()
List<String> resultList = new ArrayList<>(array.length);Collections.addAll(resultList,array);
4.使用List.of()
此方法为 Java9新增方法,定义在List接口内,并且为静态方法,故可以由类名直接调用。
List<String> resultList = List.of(array);
参考博客
- java中如何将数组转为list集合?
- java中list怎么转为数组?
list和数组间的相互转换(Java)相关推荐
- ArrayList和数组间的相互转换
ArrayList和数组间的相互转换 http://wanglihu.iteye.com/blog/243238 开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: Java代码 ...
- JavaArrayList和数组间的相互转换
一.ArrayList转换为数组 ArrayList提供public T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就是指定数组的运行时 ...
- list,set,map,数组间的相互转换
1.list转set Java代码 Set set = new HashSet( new ArrayList()); 2.set转list Java代码 List list = new ...
- java集合——集合与数组间的转换+算法
[0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--集合与数组间的转换+算法 的相关知识: 0.2) for full sour ...
- java字符串字节_Java中字符串与byte数组之间的相互转换
前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...
- Numpy中数组间运算
Numpy中数组间运算 1 数组与数的运算 [可以直接进行运算] arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr + ...
- java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》
小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...
- Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找
ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找 Java 实例 以下实例演示 ...
- PHP 对象、数组间的转换
/** * PHP 对象.数组间的转换 * * @author flyer0126 * @since 2012/05/03 **/ // 1. 利用(array)和(object),简单处理 $obj ...
最新文章
- 45 jQuery中的常用API
- 蚁群:微型机器人的社区
- Tsung压力测试介绍
- args和kwargs以及argv用法
- 美少女什么味??竟然还有美少女风味泡面......
- RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02
- 计蒜客挑战难题:简单斐波那契
- 某互联网公司广告平台技术架构
- 使用Aspose.Cell for Java操作Excel(已去除水印)
- Ceilometer - Install the API behind mod_wsgi
- Windows系统清理随记
- Isight做MATLAB优化,iSight结构优化基础16讲-学会使用isight控制ABAQUS、APDL等CAE软件...
- 2500个常用中文字符 + 130常用中英文字符
- 校园财务管理系统——数据库设计
- Tightvncserver 连接树莓派的方法及步骤
- 为什么普通人做量化交易会亏钱?
- hikari配置断开重连_Spring boot 数据库连接断线重连问题
- word图文混排复制到wangEditor图片不显示
- 开源软件新时代 55个经典开源Windows工具
- HP加易语言数据库,全源码制作的网络验证,可运营,可自行扩展