• Arrays.asList() 使用说明


    一、前言

    在我们日常工作中,经常需要把数组转换成List集合。

    因为数组的长度是固定的,不太好扩容,而List的长度是可变的,它的长度会根据元素的数量动态扩容。

    在JDK的Arrays类中提供了asList方法,可以把数组转换成List

    List< String > list = Arrays.asList(“a”,“b”,“c”);

    注意:

    1、该方法适用于对象型数据的数组(String、Integer…)

    2、该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)

    3、该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新

    4、不支持add()、remove()、clear()等方法

    正例:

    String [] array = new String [] {"a","b","c"};
    List<String> list = Arrays.asList(array);
    for (String str : list) {
        System.out.println(str);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这个例子中,使用Arrays.asList方法将array数组,直接转换成了list。然后在for循环中遍历list,打印出它里面的元素。

    如果转换后的list,只是使用,没新增或修改元素,不会有问题。

    String[] array = new String[]{"a", "b", "c"};
    List<String> list = Arrays.asList(array);
    list.add("d");
    for (String str : list) {
        System.out.println(str);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行结果:

    Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.sue.jump.service.test1.Test2.main(Test2.java:24)
    
    • 1
    • 2
    • 3
    • 4

    会直接报UnsupportedOperationException异常。

    原因:

    使用Arrays.asList方法转换后的ArrayList,是Arrays类的内部类,并非java.util包下我们常用的ArrayList。

    Arrays类的内部ArrayList类,它没有实现父类的add和remove方法,用的是父类AbstractList的默认实现。

    我们看看AbstractList是如何实现的:

    public void add(int index, E element) {
       throw new UnsupportedOperationException();
    }
    
    public E remove(int index) {
       throw new UnsupportedOperationException();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    该类的add和remove方法直接抛异常了,因此调用Arrays类的内部ArrayList类的add和remove方法,同样会抛异常。

  • 相关阅读:
    FileInputStream和FileOutputStream
    爬取微博热榜并将其存储为csv文件
    java毕业设计成品基于SSM框架图书借阅管理系统开发与设计[包运行成功]
    MySQL安装Starting the server 报红
    【音视频流媒体】WebRTC 直播超详细介绍
    Locust负载测试工具实操
    中兴交换机与H3C交换机配置链路聚合802.3ad
    「Redis」01 NoSQL及Redis概述
    新技术之互联网+
    Pandas如何对DataFrame排序和统计
  • 原文地址:https://blog.csdn.net/KevinChen2019/article/details/126339466