2

タイトルは、私が抱えている問題に光を当てています。これが私のコードです:

// fields required for traversal
private Queue<ArrayList<String>> q;
private ArrayList<ArrayList<String>> r;

Set<String> stringList = getMeStrings();
for(String s : stringList)
{
    ArrayList<String> stringsRoute = new ArrayList<String>();
    stringsRoute.add(getSomeString());
    stringsRoute.add(s);
    if(!r.contains(stringList))
    {
        if(!q.contains(stringList))
        {
            q.add(stringList);                          
        }
        r.add(stringList);
    }
}

For ループ内の If ステートメントは常に失敗します。その理由は、新しい ArrayList オブジェクト (別の参照) を作成していて、If ステートメントが [ r ] 内の各 ArrayLists の内容をチェックしていないためだと思います。同じ要素を同じ順序で含む..など

2 つの ArrayList が類似しているかどうかを調べるために .equals を使用する必要があることはわかっていますが、他の多くの ArrayList を格納する ArrayList があります。

親 ArrayList に、作成中の新しい ArrayList と同等の ArrayList が含まれているかどうかを確認するにはどうすればよいですか?

私が何を達成しようとしているのかが明確になることを願っています。

ありがとう

4

2 に答える 2

1

全体をトラバースしてから、の各要素をArrayListクラスのusingメソッドとArrayList比較する必要があります。foreachループを実装するには、のサイズを取得することを検討できます。ユーザーがサイズを返し、forループ時間を実行して、対応するの各要素を反復処理できる場合。うまくいけば、それはあなたの問題を解決します。ArrayListStringsRouteequalsArrayListArrayList ar=new ArrayList();ar.size()ar.size()ArrayList

于 2013-01-23T14:15:22.273 に答える
-1

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/AbstractList.html#equals%28java.lang.Object%29

"StringsRoute" が "r" に含まれるには、同じ要素を同じ順序で持つリストが "r" に存在する必要があります。

Arrays.asList("1","2") .equals(Arrays.asList("2","1")) == false

Arrays.asList("1","2") .equals(Arrays.asList("1","2")) == true

Arrays.asList(Arrays.asList("1","2")).contains(Arrays.asList("1","2")) == true

Arrays.asList(Arrays.asList("1","2")).contains(Arrays.asList("2","1")) == false

順序に苦労するのを避けるために、セットのリストを使用したい場合があります。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/AbstractSet.html#equals%28java.lang.Object%29

List< Set< String > > r;

以来:

new HashSet(Arrays.asList("1","2")).equals(new HashSet(Arrays.asList("2","1"))) == true
于 2013-01-23T14:38:46.943 に答える