Array

数组转集合

错误用法

  1. /**
  2. * Arrays.asList()
  3. */
  4. @Test
  5. public void testAsList(){
  6. int[] arr1 = {1,2,3};
  7. List list = Arrays.asList(arr1);
  8. System.out.println(list.size());// 输出为1
  9. String[] arr2 = {"欢迎","关注","Java"};
  10. List list2 = Arrays.asList(arr2);
  11. // list2.add("新增");// 会报错
  12. // list2.remove("关注");// 会报错
  13. }

原因

通过asList()源码可发现,Arrays.asList()它返回的是 java.util.Arrays.ArrayList ,这个家伙是谁呢?
image.png
Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,而 ArrayList直接实现了List 接口,实现了List所有方法。

  • 长度不同 和 实现的方法不同 Arrays.ArrayList是一个定长集合,因为它没有重写add,remove方法,所以一旦初始化元素后,集合的size就是不可变的。
  • 参数赋值方式不同

image.png

正确用法

  1. /**
  2. * 将数组转为List
  3. */
  4. @Test
  5. public void testArrayToList(){
  6. // 可以使用spring CollectionUtils.arrayToList
  7. int[] a = {1,2,3};
  8. List list = CollectionUtils.arrayToList(a);
  9. System.out.println(list);
  10. System.out.println(list.size());
  11. // 使用Java8
  12. int intArray[] = {1, 2, 3};
  13. List<Integer> iList = Arrays.stream(intArray)
  14. .boxed()
  15. .collect(Collectors.toList());
  16. System.out.println(iList);
  17. System.out.println(iList.size());
  18. // 还有下面这种,直接使用这种最方便,
  19. ArrayList arrayList = new ArrayList<>(Arrays.asList("welcome", "to", "china"));
  20. System.out.println(arrayList);
  21. System.out.println(arrayList.size());
  22. }