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 を使用してください。

詳細については、リストの実装 (Java チュートリアル > コレクション > 実装)を参照してください。

于 2013-02-06T23:05:53.517 に答える