Logo

Arrays.asList 与 new ArrayList(Arrays.asList()) 的区别

本文将简要介绍 Arrays.asList(array)new ArrayList<>(Arrays.asList(array)) 这两种将数组转换为列表的方法之间的主要区别。

Arrays.asList

Arrays.asList 方法可以将数组转换为固定大小的 List 对象。这个 List 实际上只是原数组的一个包装器,不会复制或创建新的数据。

主要特点:

  1. 不能修改列表长度(不允许添加或删除元素)
  2. 可以修改列表中的单个元素
  3. 对列表的修改会反映到原始数组中

示例代码:

String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);

list.set(0, "X");
System.out.println(Arrays.toString(array)); // 输出: [X, B, C]

list.add("D"); // 抛出 UnsupportedOperationException

new ArrayList<>(Arrays.asList(array))

这种方法会创建一个独立的 ArrayList 副本。

主要特点:

  1. 可以自由地添加、删除元素
  2. 对新列表的修改不会影响原始数组
  3. 拥有常规 ArrayList 的所有功能

示例代码:

String[] array = {"A", "B", "C"};
List<String> list = new ArrayList<>(Arrays.asList(array));

list.set(0, "X");
list.add("D");

System.out.println(list); // 输出: [X, B, C, D]
System.out.println(Arrays.toString(array)); // 输出: [A, B, C]

结论

  1. 如果只需要一个只读的列表视图,使用 Arrays.asList
  2. 如果需要一个可修改的独立列表,使用 new ArrayList<>(Arrays.asList(array))

选择合适的方法取决于你的具体需求和使用场景。

分享内容