2017-01-09 36 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.我想得到1,因爲兩個arrayLists都有相同的元素。我怎樣才能做到這一點?Java中的一組Arraylists

+7

這是一個錯字。您將添加到'arr'而不是'arr1'。 – shmosel

+0

我修復了錯字並改變了元素的順序。我仍然得到2.但是,如果元素具有相同的順序,那麼它給出1。但我需要它爲任何順序工作。 –

+0

現在你要問一個單獨的問題。列表按照定義排序。如果你需要一個無序的比較,使用一套。 – shmosel

回答

-2

即使內容相同,這兩個arraylist是不同的對象。你一定會在集合中看到2個元素。

就像有兩名僱員完全一樣的名字。

不確定您是否可以對arraylist實現equals方法。

+1

這是不正確的; 'ArrayList.equals()'和'ArrayList.hashCode()'是根據列表中的元素而不是對象實例來計算的。 –

2

在第二個塊中,在創建arr1後,將number1至3加到arr再次。很明顯,帶有8個元素的ArrayList不等於空的ArrayList,所以您在HashSet中有兩個成員。如果修復代碼以將相同元素添加到arr1,您將得到大小爲1的HashSet

0

在粘貼的代碼中,您將1,2,3和4添加到第一個列表(arr)兩次,並向第二個列表添加任何內容(arr1)。因此arr1.equals(arr)將是錯誤的。

修復代碼中的錯字,以便arr1包含與arr相同的元素,並且您將實現目標。