与从String数组转换为ArrayList相关的性能

时间:2013-02-06 22:56:51

标签: java

我正在将一个空的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的最佳和最安全的方法。

2 个答案:

答案 0 :(得分: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");
    }
}

就性能而言,我不担心这一点,除非你有一个非常庞大的字符串数组。

答案 1 :(得分:1)

方法java.util.Arrays.asList(T...)返回由指定数组支持的固定大小的列表。此方法List的{​​{1}}实现不支持这些方法。请参阅java.util.AbstractList的文档。

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

List Implementations (The Java Tutorials > Collections > Implementations)中查看更多内容。