如果不支持添加或删除元素,将Array转换为ArrayList有什么用?

时间:2013-11-29 05:17:39

标签: java arrays arraylist

我尝试了以下内容,并在尝试向其添加新元素时看到它抛出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会有什么用?

由于

6 个答案:

答案 0 :(得分:5)

Arrays.asList - 返回由指定数组支持的固定大小的列表。您无法在固定大小List上添加新元素。要添加新元素,请将List定义为

  List<String>  assetList = new ArrayList(Arrays.asList(asset));

答案 1 :(得分:1)

  当我尝试添加时,它会抛出java.lang.UnsupportedOperationException   它的新元素。

因为它返回固定大小的列表

引用documentation

  

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()。

选中此What is purpose of using asList?

答案 5 :(得分:0)

如果没有传递大小,则无法实例化数组。 因此,当你初始化一个数组给它的元素[间接传递大小]时,现在你使用asList(arr [])将它转换为一个ArrayList,这样就会产生一个你无法修改的固定大小的arraylist。