0

2 つの Javaオブジェクトがあり、最初の 2 つのオブジェクトの考えられるすべての組み合わせを 3 番目の結果オブジェクトList<String>に追加する必要があります。List<String>お気に入り:

List<String> list1 = getList1();
List<String> list2 = getList2();

List<String> result = new ArrayList<String>();

for(String value1 : list1) {
    for(String value2 : list2) {
        result.add(value1 + value2);
    }
}

問題は、リストが大きくなると、このクイックで汚い関数が指数関数的に遅くなることです。

long combinations = list1.size() * list2.size()

たぶん私はそれを間違っているのですが、それに対するより良いアプローチや使用できるフレームワークはありますか?

4

3 に答える 3

0

より高速にするために、結果に初期容量を提供して、ArrayList の内部配列が拡張されないようにすることができます。

int capacity = list1.size() * list2.size();
List<String> result = new ArrayList<String>(capacity);
于 2012-07-09T05:42:32.843 に答える
0

少し難しいが確実に優れた方法は、変更不可能なAbstractCollection(またはAbstractList)と関連する反復子 (必要に応じて 2 つの反復子を反復処理する)を拡張することListです。この方法では、結合されたリストに O(N*M) ストレージは必要ありません。

于 2012-07-09T07:13:46.497 に答える