我尝试了以下内容,并在尝试向其添加新元素时看到它抛出java.lang.UnsupportedOperationException
。
基本上我尝试将Array转换为ArrayList,并尝试在从数组到ArrayList协调后添加新元素。
我的节目是:
public class ArrayToList {
public static void main(String[] args) {
String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"};
List<String> assetList = Arrays.asList(asset);
for (String object : assetList) {
System.out.println("object : "+object);
}
assetList.add("test");
}
}
例外:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at anto.com.collection.ArrayToList.main(ArrayToList.java:15)
如果我们无法在转换后的值中添加或删除元素,从数组转换为Arraylist会有什么用?
由于
答案 0 :(得分:5)
Arrays.asList - 返回由指定数组支持的固定大小的列表。您无法在固定大小List
上添加新元素。要添加新元素,请将List
定义为
List<String> assetList = new ArrayList(Arrays.asList(asset));
答案 1 :(得分:1)
当我尝试添加时,它会抛出java.lang.UnsupportedOperationException 它的新元素。
因为它返回固定大小的列表。
public static <T> List<T> asList(T... a)
Returns a fixed-size list backed by the specified array.
如果您考虑添加或删除元素,最好使用LinkedList。
List<String> assetList = new LinkedList<String>(Arrays.asList(asset));
答案 2 :(得分:1)
来自Arrays#asList()
的结果列表定义为to be fixed size。这意味着您无法向其中添加新元素。
如果您想绕过它,请将其换成新的ArrayList
:
List<String> assetList = new ArrayList(Arrays.asList(asset));
答案 3 :(得分:1)
阅读Javadoc。 Arrays.asList()'返回一个固定大小的列表'。
答案 4 :(得分:1)
用于需要List的其他方法,例如Collection.sort()。
答案 5 :(得分:0)
如果没有传递大小,则无法实例化数组。 因此,当你初始化一个数组给它的元素[间接传递大小]时,现在你使用asList(arr [])将它转换为一个ArrayList,这样就会产生一个你无法修改的固定大小的arraylist。