3

ポイントのarrayList1があるとしましょう。データ構造は次のようになります。

(1,2)->(2,2)->(3,2)->(4,2)->(5,2)

Points の別の arrayList2 があります。

(2,2)->(1,2)->(8,5)->(9,3)

2 つのリストを比較して、存在しない値を arrayList2 から arrayList1 に追加するにはどうすればよいですか?

現在のソリューション

今考えられる唯一の方法は、for ループを使用して、arrayList1 内の各ポイントを比較することif(!arrayList1.contains(arrayList2.get(i))){ arrayList1.add(arrayList2.get(i)); } i++;です。

クラスからより効率的な方法または既に準備されたメソッドはありますか? arrayList1 から arrayList6 まで比較して置き換える必要があるため....

4

7 に答える 7

1

を使用する必要がありますSet。重複のないコレクションです。したがって、同じ値を 2 回追加できますが、1 回だけ存在します。

これは、に多くを追加できることを意味ListしますSet。重複はありません。

    Set setA = new HashSet(); 

    ArrayList<Point> points1 = new ArrayList<Point>();
    ArrayList<Point> points2 = new ArrayList<Point>();

    Point element1 = new Point(0,0);
    Point element2 = new Point(0,1);
    Point element3 = new Point(0,0);
    Point element4 = new Point(0,2);

    points1.add(element1); 
    points1.add(element2); 
    points1.add(element3);

    points2.add(element1);
    points2.add(element4);

    setA.addAll(points1);
    setA.addAll(points2);

    Iterator<Point> it = setA.iterator();
    while(it.hasNext())
        System.out.println(it.next());

出力:

java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=1]
java.awt.Point[x=0,y=2]
于 2015-05-27T12:15:28.403 に答える
0

2 つのリストを比較する方法

これは簡単です。equals を使用するだけです。

存在しない値を arrayList2 から arrayList1 に追加します

  • arrayList2 から arrayList1 のすべての要素を削除し、それを arrayList2 に追加します。そうすれば、新しい要素のみがarrayList2に追加されます
  • 違い (arrayList1 - arrayList2) を取得し、これらを arrayList2 に追加します (たとえばCollectionUtilsを使用)

現在の解決策はおそらく間違っています (ループに応じて、1 つの要素をスキップするか、永久に実行します)。

if(arrayList1.contains(arrayList2.get(i))) {
  i++; // this shouldn't be there if done in the loop
} else {
  arrayList1.add(arrayList2.get(i)); // here a ++ is needed if not in the loop
}

より効率的な方法はありますか

ちょっとしたアドバイス:
まず、それが機能するようにします (そして、UnitTest のカバレッジを十分に確保してください)。その後(そしてその時だけ!)必要に応じて最適化してください!

于 2015-05-27T12:17:36.927 に答える
0

このようなことができます

    list2.removeAll(list1);
    list1.addAll(list2);
于 2015-05-27T12:15:39.287 に答える