1

我正在将一个空的 String 数组(我可以从中间件获得)转换为 List 。

对于转换过程,我使用了抛出 java.lang.UnsupportedOperationException 的 Arrays.asList (请参见下面的代码)。

public class Ramddd {
    public static void main(String args[]) {
        String[] words = null;
        if (words == null) {
            words = new String[0];
        }
        List<String> newWatchlist = Arrays.asList(words);
        List<String> other = new ArrayList<String>();
        other.add("ddd");
        newWatchlist.addAll(other);
    }

}



Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractCollection.addAll(Unknown Source)
    at Ramddd.main(Ramddd.java:18)

如果我使用,我不会收到此错误

List<String> mylist = new ArrayList<String>();
        for (int i = 0; i < words.length; i++) {
            mylist.add(words[i]);
        }

这形成了一种适当的List 和任何类似的操作addALLremoveALL看起来不错,但不想使用这种 for 循环方法,因为它可能会导致性能下降。请让我知道将 String 数组转换为 ArrayList 的最佳和安全方法是什么。

4

2 回答 2

1

以下情况如何:

public class Ramddd {
    public static void main(String args[]) {
        String[] words = getWords();
        if (words == null) {
            words = new String[0];
        }
        List<String> other = new ArrayList<String>(Arrays.asList(words));
        other.add("ddd");
    }
}

在性能方面,我不担心这是什么,除非你有一个非常巨大的字符串数组。

于 2013-02-06T23:01:11.133 回答
1

该方法java.util.Arrays.asList(T...)返回一个由指定数组支持的固定大小的列表。此List方法 ( java.util.Arrays.ArrayList) 的实现不支持这些方法。请参阅java.util.AbstractList.

如果您知道单词列表的总大小,则可以为 初始化容量ArrayList,添加 n 个元素需要O ( n ) 时间。如果您不知道最终大小,请使用 LinkedList。

在List Implementations (The Java Tutorials > Collections > Implementations)中查看更多信息。

于 2013-02-06T23:05:53.517 回答