• Arrays.asList


    直接去看原文

    原文链接:Arrays.asList() 详解-CSDN博客

    -------------------------------------------------------------------------------------------------------------------------------- 

    【1. 要点】

     该方法是将数组转化成List集合的方法。

     List list = Arrays.asList("a","b","c");

    注意:

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

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

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

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

    【2.Arrays.asList()是个坑】

    用此方法得到的List的长度是不可改变的,

    当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException)。 怎么会这样?只需要看看asList()方法是怎么实现的就行了:

    public static List asList(T... a) {return new ArrayList<>(a);}

    当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。

    这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList

    它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。

    而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!

    public void add(int index, E element) { throw new UnsupportedOperationException();}

    public E remove(int index) {throw new UnsupportedOperationException();}

    总结:如果你的List只是用来遍历,就用Arrays.asList()。

               如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。

    【3.示例代码】

    1. package cn.wyc;
    2. import java.util.Arrays;
    3. import java.util.List;
    4. public class Test {
    5. public static void main(String[] args){
    6. //1、对象类型(String型)的数组数组使用asList(),正常
    7. String[] strings = {"aa", "bb", "cc"};
    8. List<String> stringList = Arrays.asList(strings);
    9. System.out.print("1、String类型数组使用asList(),正常: ");
    10. for(String str : stringList){
    11. System.out.print(str + " ");
    12. }
    13. System.out.println();
    14. //2、对象类型(Integer)的数组使用asList(),正常
    15. Integer[] integers = new Integer[] {1, 2, 3};
    16. List<Integer> integerList = Arrays.asList(integers);
    17. System.out.print("2、对象类型的数组使用asList(),正常: ");
    18. for(int i : integerList){
    19. System.out.print(i + " ");
    20. }
    21. // for(Object o : integerList){
    22. // System.out.print(o + " ");
    23. // }
    24. System.out.println();
    25. //3、基本数据类型的数组使用asList(),出错
    26. int[] ints = new int[]{1, 2, 3};
    27. List intList = Arrays.asList(ints);
    28. System.out.print("3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):");
    29. for(Object o : intList){
    30. System.out.print(o.toString());
    31. }
    32. System.out.println();
    33. System.out.print(" " + "这样遍历才能正确输出:");
    34. int[] ints1 = (int[]) intList.get(0);
    35. for(int i : ints1){
    36. System.out.print(i + " ");
    37. }
    38. System.out.println();
    39. //4、当更新数组或者List,另一个将自动获得更新
    40. System.out.print("4、当更新数组或者List,另一个将自动获得更新: ");
    41. integerList.set(0, 5);
    42. for(Object o : integerList){
    43. System.out.print(o + " ");
    44. }
    45. for(Object o : integers){
    46. System.out.print (o + " ");
    47. }
    48. System.out.println();
    49. //5add() remove() 报错
    50. System.out.print("5、add() remove() 报错: ");
    51. // integerList.remove(0);
    52. // integerList.add(3, 4);
    53. // integerList.clear();
    54. }
    55. }
     
    

  • 相关阅读:
    IDEA 启动 java web 老项目
    第3章 helloworld 驱动实验(iTOP-RK3568开发板驱动开发指南 )
    (六) ES6 新特性 —— 迭代器(iterator)
    Shell重油常压塔模拟仿真与控制
    【机器学习】KNN算法-鸢尾花种类预测
    Qt+OSG/osgEarth跨平台编译(用Qt Creator组装各个库,实现一套代码、一套框架,跨平台编译)
    linux安装mysql8超详细到每步命令
    nodejs+vue+elementui办公用品电商家具网站python
    Webmin -- File Manager模块
    MyBatis Generator 插件 详解自动生成代码
  • 原文地址:https://blog.csdn.net/weixin_70280523/article/details/134448497