Java 数组转List的四种方式

Java 数组转List的四种方式Java数组转List的四种方式第一种方式(未必最佳):使用ArrayList.asList(strArray)​ 使用Arrays工具类Arrays.asList(strArray)方式,转换完成后,只能对List数组进行查改,不能增删,增删就会抛出UnsupportedOperationException异常importjava.util.Arrays;importjava.util.List;publicstaticvoidDemo1(){String[

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

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

Java 数组转List的四种方式

第一种方式(未必最佳):使用ArrayList.asList(strArray)

​ 使用Arrays工具类Arrays.asList(strArray)方式,转换完成后,只能对List数组进行查改,不能增删,增删就会抛出UnsupportedOperationException 异常

import java.util.Arrays;
import java.util.List; 
public static void Demo1() { 
   
        String[] str = { 
   "fgx", "lzy"};
        //注意这个List不是Collections包内的List,而是util包里面的List接口
        List<String> ints = Arrays.asList(str);
    	//这里会报错
        ints.add("laopo");
    }

添加数据报错:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at JAVA基础.JDK8新特性.Java数组转List.Demo1(Java数组转List.java:20)
	at JAVA基础.JDK8新特性.Java数组转List.main(Java数组转List.java:13)

报错原因:Arrays.asList(str)返回值是java.util.Arrays类中一个私有静态内部类 java.utiil.Arrays.Arraylist,并不是我们平时用的java.util.ArrayList();

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

第二种方法(支持增删查改):

通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.utilArrays.ArrayList转为java.util.ArrayList.

关键代码ArrayList list = new ArrayList(Arrays.asList(strArray)) ;

  String[] str = { 
   "fgx", "lzy"};
        //注意这个List不是Collections包内的List,而是util包里面的List接口
        java.util.ArrayList<String> strings = new ArrayList<>(Arrays.asList(str));
        strings.add("aop");
        strings.stream().forEach(System.out::println);

image-20210904210509510

使用场景:需要在将数组转换为List后,对List进行增删改查操作,在List的数据量不大的情况下,可以使用。

第三种方式(通过集合工具类Collections.addAll()方法(最高效))

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

 public static void Demo3() { 
   
        //注意这个List不是Collections包内的List,而是util包里面的List接口
        String[] str = { 
   "fgx", "lzy"};
        java.util.ArrayList<String> stringList = new ArrayList<>(str.length);
        Collections.addAll(stringList,str);
    }

第四种方式通过JDK8的Stream流将3总基本类型数组转为List

​ 如果JDK版本在1.8以上,使用流stream来将下列3种数组快速转为List,分别是int[],long[],double[],不支持short[ ],byte[ ],char[]在JDK1.8中暂不支持.

 int[] ints = { 
   2, 34, 55, 22, 11};
        long[] longs = { 
   1, 2, 3};
        double[] doubles = { 
   1, 2, 3};
        Arrays.stream(ints).boxed().collect(Collectors.toList());
        Arrays.stream(longs).boxed().collect(Collectors.toList());
        Arrays.stream(doubles).boxed().collect(Collectors.toList());

TIPs:为什么int[]不能直接转为List,而Integer[]可以转为List,而Integer[]就可以转为List了,因为List中的泛型必须是引用类型。

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

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

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


相关推荐

  • 如何Ping特定端口号

    如何Ping特定端口号ping端口是最有效的故障排除技术之一,以便查看服务是否正常运行。系统管理员每天都使用ping命令,它依靠ICMP协议来检索有关远程主机的操作信息。但是,仅对主机进行ping操作并不总是足够的:您可能需要对服务器上的特定端口执行ping操作。此特定端口可能与数据库,ApacheWeb服务器甚至网络上的代理服务器相关。在本教程中,我们将看到如何使用各种不同的命令来ping特定端口。使用telnetping特定端口ping特定端口的最简单方法是使用telnet命令,后跟要pin.

    2026年1月16日
    4
  • win10多合一原版系统_制作WIN10多合一原版系统「建议收藏」

    win10多合一原版系统_制作WIN10多合一原版系统「建议收藏」本帖最后由zhaofeng0420于2017-6-2112:27编辑开场白…已省略1000字废话先来看看效果QQ截图20170613153956.png(25.77KB,下载次数:0)2017-6-1422:10上传提前准备:WIN10原版ISO镜像cn_windows_10_multiple_editions_version_1703_updated_march_201…

    2022年6月29日
    43
  • obligatory category_cglib为什么比jdk快

    obligatory category_cglib为什么比jdk快在一些系统代码中,随处可见的BeanCopier(源于org.springframework.cglib.beans),它主要用在将PO与DTO互转。一些人在惊叹它的高性能的同时,不曾了解它的实现原理(它不使用的反射)!它基于CGLIB代理,CGLIB(CodeGenerationLibrary)是高效的代码生成包,底层依靠ASM(开源的Java字节码编辑类库)操作字节码实现。JDK动态代…

    2025年9月15日
    6
  • STM32独立看门狗实验

    STM32独立看门狗实验一为什么需要看门狗?在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至发生跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为“看门狗(WatchDog)”。二看门狗的作用看门狗在我们程序正常工作的时候是不工作的,也就是说他根本没有任何作用,只有在单片…

    2022年5月18日
    115
  • python 生成随机矩阵_matlab建立m行n列矩阵

    python 生成随机矩阵_matlab建立m行n列矩阵导入模块random模块numpy中的random函数python中有两个模块可以生成随机数,该博客以的numpy模块为例进行生成随机数。(因为矩阵要生成大量的随机数据,故推荐使用numpy模块生成随机数)生成随机数(以矩阵为例)#生成随机矩阵importnumpyasnp# 设置随机种子,保证每次生成的随机数一样rd=np.random.RandomState(…

    2025年8月9日
    3
  • pycharm2021专业版激活码【注册码】

    pycharm2021专业版激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    53

发表回复

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

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