如何绕过ArrayList.contains使用==

时间:2011-12-16 17:29:38

标签: java arraylist

有一个问题,.equals()的底层实现由于它们的键值对而将2 Map视为相同,而不是它们的mem ref。虽然我知道这是正确的程序,但我仍然希望根据唯一的参考将它们添加到另一个ArrayList

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个元素。

2 个答案:

答案 0 :(得分:4)

您可以创建正在使用的Map实施的子类,并覆盖equals()hashCode()

答案 1 :(得分:0)

你可以创建一个正在使用的地图的后代,它覆盖了equals和hashcode,但这对你想要的东西来说太过分了。

而是编写一个方法来进行所需的包容测试,例如:

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

在其中,您遍历集合中的项目,并使用==检查是否与您要添加的内容相同。