zoukankan      html  css  js  c++  java
  • 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 }

    !!!

  • 相关阅读:
    iphone 拨打电话的 两种方法-备
    vi编辑器经典技巧 -备
    iOS图片压缩问题
    NSStirng、NSArray、以及枚举(Method小集合)
    宏定义 button 方法 --备
    debug 输出 以及宏定义--备
    从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备
    makefile编写---.c .cpp 混合编译makefile 模板
    图像处理之基础---线性卷积和循环卷积的区别
    图像处理之基础---卷积去噪
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/10682010.html
Copyright © 2011-2022 走看看