1、Arrays.asList()返回一个可变集合,List.of()返回一个不可变集合。
List<Integer> list = Arrays.asList(1, 2, null);
list.set(1, 10); // ok
List<Integer> list = List.of(1, 2, 3);
list.set(1, 10); // Fails with UnsupportedOperationException
2、Arrays.asList()允许空元素,List.of()不允许。
List<Integer> list = Arrays.asList(1, 2, null); // OK
List<Integer> list = List.of(1, 2, null); // Fails with NullPointerException
3、Arrays.asList 作用于数组时,返回的是原数组的视图 List.of 则不是。
Integer[] array = {1,2,3};
List<Integer> list = Arrays.asList(array);
array[1] = 10;
System.out.println(list); // Prints [1, 10, 3]
Integer[] array = {1,2,3};
List<Integer> list = List.of(array);
array[1] = 10;
System.out.println(list); // Prints [1, 2, 3]
并发修改异常的注意点
循环删除 倒数第一 第二个数据时不会异常
List<String> tmpList = new LinkedList<>();
tmpList.add("Hello");
tmpList.add("My");
tmpList.add("Son");
for (String curStr : tmpList) {
if ("Hello".equals(curStr)) {
tmpList.remove(curStr);
}
System.out.printf("curStr = %s, tmpLIst = %s\n", curStr, tmpList.toString());
}