2011-12-16 51 views
0

存在的問題是.equals()的底層實現將2 Map視爲相同,因爲它們的鍵值對而不是它們的mem ref。雖然我知道這是正確的程序,但我仍然希望根據獨特的參考將它們添加到另一個ArrayList如何解決ArrayList.contains使用==

String[] sortedStringOfDatesFromTempMaps = new String[dates.length]; 

List<Map<String, String>> tempTradeMap; 

for (int i = 0; i < sortedStringOfDatesFromTempMaps.length; i++) { 
     String[] stringSplitArr = new String[2]; 
     stringSplitArr = sortedStringOfDatesFromTempMaps[i].split("="); 

     for (int j = 0; j < tempTradeMap.size(); j++) { 
      if (tempTradeMap.get(j).containsValue(stringSplitArr[0]) 
        && tempTradeMap.get(j).containsValue(stringSplitArr[1])){ 

       if(!sortedMapList.contains(tempTradeMap.get(j))){ 
        sortedMapList.add(tempTradeMap.get(j)); 
       } 

       break; 
      } 
     } 
    } 

我遇到的問題是,應該sortedMapList有相同數量的傳遞中,擺在首位的元素。然而,因爲包含impl的人平等對待他們,他們只能加一個。所以如果有5個元素和2個重複對,最終列表將只包含3個元素。

+1

難道是行「sortedMapList.contains(tempTradeMap.get(j))」嗎? – DJClayworth 2011-12-16 17:39:08

回答

4

您可以創建子類,你正在使用的Map implementaion並在此改變equals()hashCode()

0

您可以創建那種你正在使用凌駕於地圖的後裔equals和hashCode,但是這是矯枉過正什麼你要。

而是寫做你想要遏制測試,像一個方法:

boolean containsExactly(Collection c,Object o) {... 

在它您遍歷​​集合中的項並要使用添加什麼檢查是否有任何等同於== 。

相關問題