2017-02-17 9 views
0

私は、リストのリストを維持し、それに基づいていくつかの操作を行う必要があるシナリオを持っています。Javaのリストのリストの中にリストを挿入してチェックするには?

[{peter,se,red},{peter,da,red},{mark,se,red}] 

私は最初の値を取得し、それが存在しない場合は、リストのリストにこのリストを挿入するリストを作成します。私は、次のようなもののリストを取得しようとしています。たとえば、{peter、se、red}が再び来たら、それは挿入されるべきではありません。

ArrayList<ArrayList<String>> listOfList = new ArrayList<ArrayList<String>>(); 
ArrayList<String> singleList = new ArrayList<String>(); 

void someFunction() { 
    singleList.add("val1"); 
    singleList.add("val2"); 
    singleList.add("val3"); 

if(listOfList.containsAll(singleList)) { 
    <<some operation>> 
} else { 
    listOfList.add(singleList); 
    <<some operation>> 
} 
//clearing the list, so it can be freshly used 
//upon successive invocation of the function 
singleList.clear();  

現在、同じリストを2回渡しても、システムはelse部分に固執します。誰かが私がどこに間違っているか教えてください。また、このタスクを実装する別のより良い方法がありますか?

if(listOfList.contains(singleList)) { 
    <<some operation>> 
} else { 
    listOfList.add(singleList); 
    <<some operation>> 
} 

鍵はここにあなたが含まれています(使用されることがある)メソッドの代わりに、のcontainsAll()メソッド

+1

入れ子リストの代わりにクラスを使用する方がよいでしょう。実際、これはほとんどこれを実現する最悪の方法です。 – Kayaman

+0

セットを使用して重複を削除します。 – shmosel

+1

リンクハッシュセットはどうですか? http://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html –

答えて

1

HashSet<ArrayList<String>>を使用しても問題ありませんか?または、.contains()メソッドを使用して、ListにcontainsAllの代わりに要素が含まれているかどうかを確認することができます。

+0

.Contains()は動作していますが、予期した方法ではありません。この場合、HashSetの使い方を見ていきます。 – SRS

0

は、代わりに次のことを試してみてください。

containsAll()はオブジェクトのコレクションをチェックしています。この場合、リストのコレクションは、単一のリストを提供しているだけです。

関連する問題