2011-12-16 6 views
0

.equals()の基本的な実装では、キーの値のペアであるため、mem refではなく、2 Mapを同じものとして扱うという問題があります。私はこれが正しい手順であることを知っているが、私は依然としてユニークな参照に従って別の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が最初の場所で、渡された要素の数が同じでなければならないということです。しかし、包含インプラントはそれらを等しく扱うので、インパクトを加えるだけです。したがって、5つの要素があり、2つの複製ペアがある場合、最終リストには3つの要素しか含まれません。

+1

問題が発生している行「sortedMapList.contains(tempTradeMap.get(j))」ですか? – DJClayworth

+0

はい、そうです、私は参照して、KVのペアではないチェックしたい。 – user1089599

答えて

4

あなたが使用しているMap implementaionの子クラスを作成して、あなたはそのオーバーライドを使用している地図の種類の子孫を作成することができ

0

equals()hashCode()に等しいとhashCodeオーバライドが、それは何のために行き過ぎだことができますあなたは欲しい。

代わりのように、あなたが望む包含テストを行うための方法を記述します==それで

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

あなたは、コレクション内の項目を反復処理し、任意のは、あなたが使用して追加したいものと同じであるかどうかを確認。

関連する問題