方法Arrays.asList(<T>...A)
返回A
的List
表示。
这里返回的对象是由数组支持的List
,但不是一个ArrayList
对象。
我正在寻找Arrays.asList()
返回的对象与ArrayList
对象之间的区别--一种快速了解这些差异而不必深入代码的来源。
TIA。
方法Arrays.asList(<T>...A)
返回A
的List
表示。
这里返回的对象是由数组支持的List
,但不是一个ArrayList
对象。
我正在寻找Arrays.asList()
返回的对象与ArrayList
对象之间的区别--一种快速了解这些差异而不必深入代码的来源。
TIA。
当您调用Arrays.asList时,它不会返回一个java.util.ArrayList
。它返回一个java.util.Arrays$ArrayList
,这是一个由原始源数组支持的固定大小列表。换句话说,它是一个视图,可通过Java的基于集合的API公开显示数组。
String[] sourceArr = {"A", "B", "C"};
List<String> list = Arrays.asList(sourceArr);
System.out.println(list); // [A, B, C]
sourceArr[2] = ""; // changing source array changes the exposed view List
System.out.println(list); //[A, B, ]
list.set(0, "Z"); // Setting an element within the size of the source array
System.out.println(Arrays.toString(sourceArr)); //[Z, B, ]
list.set(3, "Z"); // java.lang.ArrayIndexOutOfBoundsException
System.out.println(Arrays.toString(sourceArr));
list.add("X"); //java.lang.UnsupportedOperationException
list.remove("Z"); //java.lang.UnsupportedOperationException
您无法向其添加元素,也无法从其中删除元素。如果尝试向它们添加或删除元素,则会收到 UnsupportedOperationException
。
我会稍微扩展一下我的评论。
如果你使用 asList
作为一个与 ArrayList
对象没有区别的替代品,就可能会发生一个问题:
List<Object> list = Array.asList(array) ;
list.remove(0); // UnsupportedOperationException :(
你不能删除第0个元素,因为asList
方法返回的是由指定数组支持的固定大小的列表。所以你应该这样做:
List<Object> newList = new ArrayList<>(Arrays.asList(array));
为了使newList
可以被修改。set
方法通过索引来改变值,例如要更改索引 1 中的值,请使用 list.set(1, Object)
。 - christianbueno.1
asList
方法返回一个由指定数组支持的固定大小的列表。 - Maroun