【Java基础】Arrays.asList() 的使用注意。

Arrays.asList() 方法不理解就使用还是有很多坑的。比如,它返回的是自己内部类的 java.util.Arrays.ArrayList

【Java基础】Arrays.asList() 的使用注意。_第1张图片 

  • "阉割版"的List。不可进行Add/Remove。
  • 更要注意的是:

如果我们在这里针对集合修改了某处元素值,那么原来数组的内容也会相应改变!即通过Arrays.asList()方法,得到的集合与原数组就已经关联起来,反之,如果我们修改了数组内容,那么集合获取到的内容也会随之改变。

 可知道,构造ArrayList只是做了个对象引用的复制。而不是重新copy一份原来的对象。

  • 用对象和基本类型构建是不一样的。如:

  public static boolean testInteger (Integer num) {
            Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6};
            boolean flag = Arrays.asList(nums).contains(num);
            return flag;
        }
        
   public static boolean testInt (int num) {
            int[] nums = new int[]{1, 2, 3, 4, 5, 6};
            boolean flag = Arrays.asList(nums).contains(num);
            return flag;
        }

前一个返回true,后一个返回false。

int[] nums = new int[] { 1, 2, 3, 4, 5, 6 };
List list = Arrays.asList(nums);// 本质上把 T 泛型就是 int[] 数组类型。所以 返回 List 而不是 List
boolean flag = Arrays.asList(nums).contains(num);

Integer[] nums1 = new Integer[] { 1, 2, 3, 4, 5, 6 };
List list2 = Arrays.asList(nums1); // T 泛型 就是 Integer 所以返回的就是 List。

List list3 = Arrays.asList(nums1,nums1);  // T 泛型 就是 Integer[] 所以返回的就是 List。

boolean flag2 = Arrays.asList(nums).contains(num);

从这里可以看出 两者之间的区别:

我们输出下 list的集合的大小。
System.out.println(list.size());
输出的是:1
因为:泛型的类型参数只能是类类型(包括自定义类),不能是基本类型!
所以这里其实就已经有分歧了,所以这里我们相当于传入了一个对象,对象类型为数组类型,可变参数的长度是1,
而不是6。此时list相当于一个二维数组,在上面的情况中,即list数组的元素类型为数组,元素个数为1,而不是上面的Integer,此时集合为List
  • Arrays.asList()  返回 size = 1 的空集合的情况。
    Person person = null;
    List list = Arrays.asList(person);
    System.out.println(list.size());
        

    输出 size = 1;循环的时候很容易 报错 null。 这里 泛型 T.. a 等价于 Person[] array = { null };

 

你可能感兴趣的:(基础知识)