2017-01-09 5 views
0
Set<ArrayList<Integer>> hs = new HashSet<ArrayList<Integer>>(); 

    ArrayList<Integer> arr = new ArrayList<Integer>(); 

    arr.add(1); 
    arr.add(2); 
    arr.add(3); 
    arr.add(4); 

    hs.add(arr); 

    ArrayList<Integer> arr1 = new ArrayList<Integer>(); 

    arr1.add(4); 
    arr1.add(3); 
    arr1.add(2); 
    arr1.add(1); 

    hs.add(arr1); 

    System.out.println(hs.size()); 

私が得る出力は2です。arrayListsには両方とも同じ要素があるので、1を取得したいと思います。どうすればこれを達成できますか?JavaでのArraylistsのセット

+7

これはタイプミスです。 'arr1'ではなく' arr'に追加しています。 – shmosel

+0

私はタイプミスを修正し、要素の順序を変更しました。私はまだ2になっています。しかし、要素の順序が同じであれば、それは1になります。しかし、すべての順序で機能する必要があります。 –

+0

今、別の質問をしています。リストは定義順に並んでいます。順序のない比較が必要な場合は、セットを使用します。 – shmosel

答えて

-2

内容が同じであっても、両方のarraylistsは異なるオブジェクトです。あなたはセット内の2つの要素を見るように縛られています。

全く同じ名前の2人の従業員がいるようです。

arraylistsにequalsメソッドを実装できるかどうかは不明です。

+1

これは正しくありません。 'ArrayList.equals()'と 'ArrayList.hashCode()'は、オブジェクトインスタンスではなく、リスト内の要素に基づいて計算されます。 –

2

arr1を作成した後の2番目のブロックでは、arr に1から3の番号を再度に追加します。明らかに、8要素のArrayListは空のArrayListと等しくないので、HashSetには2つのメンバーがあります。同じ要素をarr1に追加するようにコードを修正すると、サイズが1のが表示されます。

0

貼り付けたコードでは、最初のリストに1,2,3,4を追加しています(arr)を2回追加し、2番目のリストに何も追加しないでください(arr1)。したがって、arr1.equals(arr)は偽になります。

arr1にはarrと同じ要素が含まれていますので、目標を達成できます。

関連する問題