• java Arrays.asList方法注意事项


    1. 简介

    Arrays.asList()方法可以将数组转化为长度固定的列表。

    该方法强调了列表的长度是固定的,因此不能使用list的add和remove方法修改list长度。

    2. 示例

     1 import java.util.*;
     2 
     3 public class ListFunc1 {
     4     public static void main(String[] args){
     5 
     6         Integer[] array1 = new Integer[]{1,2,3,4};
     7         List<Integer> list1 = Arrays.asList(array1);
     8         list1.set(0,0);
     9 //        list1.add(5);                  // (1)
    10 //        list1.remove(2);              // (2)
    11         System.out.println(list1);
    12 
    13         /*
    14         * ArrayList(Collection<? extends E> c)
    15         * 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表
    16         * */
    17         Integer[] array2 = new Integer[]{1,2,3,4};
    18         List<Integer> list2 = new ArrayList<>(Arrays.asList(array2));   // (3)
    19         list2.set(0,0); 
    20         list2.add(5);
    21         list2.remove(2);
    22         System.out.println(list2);    // [1, 2, 4, 5]
    23     }
    24 }

    示例说明如下:

    (1)使用add()方法时将会抛出异常:Exception in thread "main" java.lang.UnsupportedOperationException;

             源码如下,可以发现使用add方法时将会直接抛出异常。

    1  public boolean add(E e) {
    2         add(size(), e);
    3         return true;
    4  }
    5 
    6 public void add(int index, E element) {
    7         throw new UnsupportedOperationException();
    8 }

    (2)使用remove()方法时将会抛出异常:Exception in thread "main" java.lang.UnsupportedOperationException;

             源码如下,可以发现使用remove方法时将会直接抛出异常。

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

    (3)如果想要修改由数组转换而成的列表,可以使用ArrayList(Collection<? extends E> c)构造器,

            新建一个列表即可,构造器的参数为集合。

     1 import java.util.*;
     2 
     3 public class Main1 {
     4     public static void main(String[] args){
     5 
     6         /* Arrays.asList()构建列表
     7         * 列表长度不可变,即不可以add和remove
     8         * */
     9         int[] intArray1 = new int[]{5, 7};
    10         List<int[]> intList1 = Arrays.asList(intArray1);
    11         System.out.println(intList1);   // [[I@1540e19d]
    12 
    13         Integer[] intArray2 = new Integer[]{5, 7};
    14         List<Integer> intList2 = Arrays.asList(intArray2);
    15         //        intList2.add(3);              // error
    16         System.out.println(intList2);   // [5, 7]
    17 
    18 
    19 
    20         /* 使用ArrayList(Collection<? extends E> c)构建列表
    21         *  长度可变,即可以add和remove
    22         * */
    23         int[] intArray = new int[]{2, 4};
    24         List<int[]> intList = new ArrayList<>(Arrays.asList(intArray));
    25         System.out.println(intList);    // [[I@1540e19d]
    26 
    27         Integer[] integerArray = new Integer[]{1,3};
    28         List<Integer> integerList = new ArrayList<>(Arrays.asList(integerArray));
    29         integerList.add(5);          // success
    30         System.out.println(integerList);   // [1, 3, 5]
    31     }
    32 }

    !!!

  • 相关阅读:
    第五章
    大道至简第一章。原因:之前第一章发表成文章了,无法显示在主页
    字符加密
    String类的使用说明
    String.equals()
    大道至简第四章
    使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
    Java——Random类随机整数---18.10.11
    Java——英文字母---18.10.11
    Java——自动生成30道四则运算---18.09.27
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/10682010.html
Copyright © 2020-2023  润新知