2016-09-28 5 views
1

私はリストのリストを持っており、重複することなくリストを追加したいと思います。それ以外の場合は、そのリストがすでにメインリストに含まれているかどうか確認したいと思います。私はMainの内容を印刷するとき、私はtemptemp1の両方を得る。このような何かArrayListに別のArrayListが要素として含まれているかどうかを確認する

import java.util.ArrayList; 
public class Test{ 
public static void main(String [] args) 
{ 
    ArrayList<ArrayList<String>> Main = new ArrayList<>(); 
    ArrayList<String> temp = new ArrayList<>(); 
    temp.add("One"); 
    temp.add("Two"); 
    temp.add("Three"); 
    Main.add(temp);// add this arraylist to the main array list 
    ArrayList<String> temp1 = new ArrayList<>(); 

    temp1.add("One"); 
    temp1.add("Two"); 
    temp1.add("Three"); 

    if(!Main.containsAll(temp1)) // check if temp1 is already in Main 
    { 
    Main.add(temp1); 
    } 
} 
} 

を書かれています。これをどうすれば解決できますか?

containsAbstractListの方法 equalsは、その内容及びここでの含有量を比較するため、ここで temp.equals(temp1)戻り trueような場合であろう提供 ArrayList等しい ArrayListのインスタンスをチェックするため、メソッド List#contains()を使用することができ
+0

'Main.add(new ArrayList (temp));'を実行する必要があります。 tempを直接追加するとtemp変数(オブジェクト)への参照が設定されますが、これはあなたが望むものではありません。 – progyammer

答えて

1

ここで問題となるのは、containsAllとリストのリストと混同していることです。

containsAllは、このコレクションに指定されたコレクションのすべての要素が含まれているかどうかをチェックするメソッドです。この場合、

  • このコレクションには、1つの要素(List<String>)があります。
  • 与えられたコレクションには、3つの要素があり、"One,"Two"および"Three"です。

そして明確に、唯一の(["First, "Two", "Three"]です)List<String>が含まれているこのコレクションは、ないは、3つの要素を含んでいます。これらの3つの要素のリストのみが含まれています。

ここで本当に欲しいのはcontainsAllではなく、containsです。つまり、リストに別のリスト(要素ではない)が含まれているかどうかを確認する必要があります。

次作品:

if (!Main.contains(temp1)) { 
    Main.add(temp1); 
} 

Main[[One, Two, Three]]ことになりますが、一度だけ追加しました。

サイドの質問は:なぜ機能するのですか?さて、質問は:List<List<String>>[[One, Two, Three]]にはList<String>という[One, Two, Three]が含まれていますか? 2つのリストは同じサイズで、それらの要素のすべてが等しいときに等しいので、それはそれを含みます。

+0

完璧;それは完璧に動作します。詳細をありがとう – user3841581

2

それらはArrayListと同等です。

if(!Main.contains(temp1)) // check if temp1 is already in Main 
{ 
    Main.add(temp1); 
} 
+0

それは完璧に動作します。おかげで – user3841581

1

あなたが(内側のリストの要素をチェックしていない)の重複リストを避けたいので、だけではなく、Main.containsAllMain.containsを使用しています。

これは、Mainリストに既に追加しようとしている要素のリストが含まれているかどうかをチェックします。

0

ArrayList<Integer>だったらどうしますか?このような方法はと呼ばれています。メインリストにオブジェクト(別のリスト)が含まれているかどうかをチェックするには、この関数をパラメータとして渡します。

関連する問題