有一个问题,.equals()
的底层实现将 2 个 Map
视为相同,因为它们的键值对,而不是它们的内存引用。虽然我知道这是正确的过程,但我仍然想根据唯一引用将它们添加到另一个 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
首先应该具有与传入的元素数量相同的元素。然而,由于 contains impl 同等对待它们,因此它们只添加一个。因此,如果有 5 个元素,其中有 2 个重复对,则最终列表将仅包含 3 个元素。
最佳答案
您可以创建您正在使用的Map
实现的子类并覆盖equals()
和hashCode()
关于java - 如何绕过 ArrayList.contains 使用 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537912/