有一个问题,.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个元素。
答案 0 :(得分:4)
您可以创建正在使用的Map
实施的子类,并覆盖equals()
和hashCode()
答案 1 :(得分:0)
你可以创建一个正在使用的地图的后代,它覆盖了equals和hashcode,但这对你想要的东西来说太过分了。
而是编写一个方法来进行所需的包容测试,例如:
boolean containsExactly(Collection c,Object o) {...
在其中,您遍历集合中的项目,并使用==检查是否与您要添加的内容相同。