老程序员Java数组转List都这样操作「建议收藏」

老程序员Java数组转List都这样操作「建议收藏」一、使用Arrays.asList()通过Arrays.asList(strArray)方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。测试代码如下:publicstaticvoidway1(){List<String>list=Arrays.asList(“1″,”2”);//对转换后的list插入一条数据list.add(“3”);System.out.println(lis

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、使用Arrays.asList()

通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。

测试代码如下:

public static void way1(){ 
   
        List<String> list = Arrays.asList("1", "2");
        //对转换后的list插入一条数据
        list.add("3");
        System.out.println(list);
}
// 调用代码省略

运行后报错:

image-20211113142512411

报错原因:

Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。

使用场景:Arrays.asList(strArray)方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。

二、通过ArrayList的构造器

Arrays.asList()的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList

测试代码:

public static void way2(){ 
   
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("1", "2")) ;
        //对转换后的list插入一条数据
        list.add("3");
        System.out.println(list);
}
// 调用代码省略

运行结果:

[1, 2, 3]

三、集合工具类Collections.addAll()

根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。

测试代码:

public static void way3(){ 
   
    String[] strArray = { 
   "1", "2"};
    ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
    Collections.addAll(arrayList, strArray);
    arrayList.add("3");
    System.out.println(arrayList);
}
// 调用代码省略

运行结果:

[1, 2, 3]

使用场景:

需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。

四、Java8 stream流

如果JDK版本在1.8以上,可以使用流stream来将下列3种数组快速转为List,分别是int[]、long[]、double[],其他数据类型比如short[]、byte[]、char[],在JDK1.8中暂不支持。由于这只是一种常用方法的封装,不再纳入一种崭新的数组转List方式,暂时算是java流送给我们的常用工具方法吧。

测试代码:

public static void way4(){ 
   
    // String数组
    String[] arrays = { 
   "a", "b", "c"};
    List<String> stringList= Stream.of(arrays).collect(Collectors.toList());
    // int[]、long[]、 double[]
    List<Integer> intList= Arrays.stream(new int[] { 
    1, 2, 3, }).boxed().collect(Collectors.toList());
    List<Long> longList= Arrays.stream(new long[] { 
    1, 2, 3 }).boxed().collect(Collectors.toList());
    List<Double> doubleList= Arrays.stream(new double[] { 
    1, 2, 3 }).boxed().collect(Collectors.toList());

    System.out.println(stringList);
    System.out.println(intList);
    System.out.println(longList);
    System.out.println(doubleList);
}

五、Java9 内置方法

测试代码:

List<String> list1 = List.of("4", "5", "6");

也不可以进行add操作

六、第三方的工具类

很多第三方的集合工具类可以实现这个功能,如Guava等:

ImmutableList.of("a", "b", "c", "d");
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机连不上网所有可能我都遇到

    虚拟机连不上网所有可能我都遇到ping不通,主机访问不了虚拟机等等等等虚拟机ping不通VWnet8的ip、ping不通网关、ping不通百度、yum出现tryothermirror。虚拟机ping不通VWnet8的ip、ping不通网关、ping不通百度、yum出现tryothermirror。首先要编辑虚拟机网络为NAT模式,并设定网关、子网掩码。然后进入NAT设置里,将允许任何组织唯一标识符勾选,这个有时候系统默认没钩。然后进入DHCP设计起始ip和结束ip。进入本地网络,修改VWnet8适配器右键属性

    2022年6月26日
    29
  • ununtu14安装csitools_ubuntu 16.04 安装

    ununtu14安装csitools_ubuntu 16.04 安装相关包的下载网址:http://www.netfilter.org/projects/iptables/downloads.html1、解压进入目录#tar-vxjfipset-6.24.tar.bz2#cd cdipset-6.24/2、初始化ipset编译环境,需要automake,autoconf,pkg-config和libtool的支持。#./autog

    2022年10月6日
    0
  • ADO.net中常用的对象介绍

    ADO.NET的对象主要包括:DataSet,DataTable,DataColumn,DataRow,和DataRelation。DataSet:这个对象是一个集合对象,它可以包含任意数量的数据表

    2021年12月20日
    43
  • 《软件安装与使用教程》— Python语言常用开发工具Spyder、Pycharm、VS Code、Jupyter的使用「建议收藏」

    《软件安装与使用教程》— Python语言常用开发工具Spyder、Pycharm、VS Code、Jupyter的使用「建议收藏」Python语言常用开发工具Spyder、Pycharm、VSCode、Jupyter的使用

    2022年8月25日
    5
  • 什么对山峰正如低陷对山谷_bfs系列

    什么对山峰正如低陷对山谷_bfs系列FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。为了能够对旅程有一个安排,他想知道山峰和山谷的数量。给定一个地图,为FGD想要旅行的区域,地图被分为 n×n 的网格,每个格子 (i,j) 的高度 w(i,j) 是给定的。若两个格子有公共顶点,那么它们就是相邻的格子,如与 (i,j) 相邻的格子有(i−1,j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1)。我们定义一个格子的集合 S 为山峰(山谷)当且仅当:

    2022年8月8日
    4
  • Activiti 简易教程「建议收藏」

    Activiti 简易教程「建议收藏」一搭建环境1.1  JDK6+activiti运行在版本6以上的JDK上。转到OracleJavaSE下载页面,点击按钮“下载JDK”。网页中也有安装说明。要核实安装是否成功,在命令行上运行java–version。将打印出安装的JDK的版本。1.2  Ant1.8.1+从Ant[http://ant.apache.org/bindownload.c

    2022年7月21日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号