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

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

 

  • "阉割版"的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<int[]> list = Arrays.asList(nums);// 本质上把 T 泛型就是 int[] 数组类型。所以 返回 List<T> 而不是 List<Integer>
boolean flag = Arrays.asList(nums).contains(num);

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

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

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

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

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

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值