Java 如何绕过要使用的ArrayList.contains==
有一个问题,Java 如何绕过要使用的ArrayList.contains==,java,arraylist,Java,Arraylist,有一个问题,.equals()的底层实现将2个Maps视为相同的,因为它们是键值对,而不是它们的mem ref。虽然我知道这是正确的过程,但我仍然希望根据唯一引用将它们添加到另一个ArrayList String[] sortedStringOfDatesFromTempMaps = new String[dates.length]; List<Map<String, String>> tempTradeMap; for (int i = 0; i < sor
.equals()
的底层实现将2个Map
s视为相同的,因为它们是键值对,而不是它们的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;
}
}
}
String[]sortedStringOfDatesFromTempMaps=新字符串[dates.length];
地图列表;
对于(int i=0;i
我遇到的问题是,
sortedMapList
首先应该具有传入的相同数量的元素。然而,由于CONTAINSPL对它们一视同仁,它们只添加了一个。因此,如果有5个元素,有2个重复对,那么最终列表将只包含3个元素。您可以创建您正在使用的Map
实现的子类,并覆盖equals()
和hashCode()
您可以创建正在使用的Map
实现的子类,并覆盖equals()
和hashCode()
您可以创建一个您正在使用的映射类型的子类,覆盖equals和hashCode,但这对于您想要的东西来说是过度的
相反,编写一个方法来执行所需的安全壳测试,如:
boolean containsExactly(Collection c,Object o) {...
在其中,您迭代集合中的项,并检查是否有与使用==添加的项相同的项。您可以创建您正在使用的映射类型的子体,该子体覆盖了equals和hashcode,但这对于您所需的内容来说是多余的 相反,编写一个方法来执行所需的安全壳测试,如:
boolean containsExactly(Collection c,Object o) {...
在其中,您迭代集合中的项目,并检查是否有与您要添加的项目相同的项,使用==。是否是导致您出现问题的行“sortedMapList.contains(testrademap.get(j))?是的,因此我希望它通过引用而不是KV对进行检查。是否是行“sortedMapList.contains(testrademap.get(j))”这就是给你带来麻烦的原因?是的,所以我想让它通过参考来检查,而不是KV对。