我正在将一个空的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
,任何像addALL
,removeALL
这样的操作似乎都很好,但是不想转到这种for循环方法,因为它可能会带来性能。
请告诉我将String数组转换为ArrayList的最佳和最安全的方法。
答案 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)中查看更多内容。