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对。