前言

如果觉得文字太啰嗦直接看文章中的代码块也是完全没问题的。

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)相关推荐

  1. ArrayList和数组间的相互转换

    ArrayList和数组间的相互转换 http://wanglihu.iteye.com/blog/243238 开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: Java代码   ...

  2. JavaArrayList和数组间的相互转换

    一.ArrayList转换为数组 ArrayList提供public T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就是指定数组的运行时 ...

  3. list,set,map,数组间的相互转换

    1.list转set Java代码   Set set =  new  HashSet( new  ArrayList()); 2.set转list Java代码   List list =  new ...

  4. java集合——集合与数组间的转换+算法

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--集合与数组间的转换+算法 的相关知识: 0.2) for full sour ...

  5. java字符串字节_Java中字符串与byte数组之间的相互转换

    前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...

  6. Numpy中数组间运算

    Numpy中数组间运算 1 数组与数的运算     [可以直接进行运算] arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr + ...

  7. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》

    小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...

  8. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找

    ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找  Java 实例 以下实例演示 ...

  9. PHP 对象、数组间的转换

    /** * PHP 对象.数组间的转换 * * @author flyer0126 * @since 2012/05/03 **/ // 1. 利用(array)和(object),简单处理 $obj ...

最新文章

  1. 45 jQuery中的常用API
  2. 蚁群:微型机器人的社区
  3. Tsung压力测试介绍
  4. args和kwargs以及argv用法
  5. 美少女什么味??竟然还有美少女风味泡面......
  6. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02
  7. 计蒜客挑战难题:简单斐波那契
  8. 某互联网公司广告平台技术架构
  9. 使用Aspose.Cell for Java操作Excel(已去除水印)
  10. Ceilometer - Install the API behind mod_wsgi
  11. Windows系统清理随记
  12. Isight做MATLAB优化,iSight结构优化基础16讲-学会使用isight控制ABAQUS、APDL等CAE软件...
  13. 2500个常用中文字符 + 130常用中英文字符
  14. 校园财务管理系统——数据库设计
  15. Tightvncserver 连接树莓派的方法及步骤
  16. 为什么普通人做量化交易会亏钱?
  17. hikari配置断开重连_Spring boot 数据库连接断线重连问题
  18. word图文混排复制到wangEditor图片不显示
  19. 开源软件新时代 55个经典开源Windows工具
  20. HP加易语言数据库,全源码制作的网络验证,可运营,可自行扩展

热门文章

  1. CURRENT_TIMESTAMP函数精度
  2. Palindrome Permutation
  3. 电脑上的文件删除不掉,需要管理员权限怎么办?
  4. 计算机应用工程师vs平面设计,计算机专业和平面设计专业是一个专业不?
  5. 嵌入式软件工程师有必要精通算法,参加各种编程大赛吗?
  6. 机器视觉、模式识别开源库汇总
  7. 同一进程中线程的共享资源以及独占资源
  8. 怎么利用jquery.form 提交form
  9. 基于混合策略的麻雀搜索算法
  10. outlook设置rule后邮件提醒消失