轻松地在Java的Collections接口中更改.contains()方法,以确保平等

问题描述 投票:0回答:2

我想知道是否有一种方法可以轻松地在Java的List接口中修改“ .contains()”方法而无需创建自定义类。例如:

[当处理Java中的数组集合时,.contains()方法将始终返回false,因为.contains()方法始终使用Object类的泛型.equals()调用检查是否相等,如果比较的对象在内存中具有相同的引用。但是,对于数组,对两个数组执行Arrays.equals()检查会更加有用。

代码:

public class Temp {
    public static void main(String[] args) {
        int[] myIntArray = new int[] {1, 2, 3};
        List<int[]> myList = new ArrayList<>();
        myList.add(myIntArray);
        System.out.println(myList.contains(new int[] {1, 2, 3}));
    } // Output in the console: false
    // Preferred output: true
}

我知道可以通过使用for循环并使用Arrays.equals()方法遍历整个列表来相当容易地做到这一点,但是我的目标是学习如何轻松地雕刻.contains()方法,以备将来使用。非常感谢!

java collections interface equals contains
2个回答
0
投票

我想知道是否有一种方法可以轻松地在Java的contains接口中修改List方法而无需创建自定义类。

没有办法。 contains的标准实现的List方法的行为符合List API的规定;即他们使用equals方法。

相反,扩展ArrayList类并覆盖contains以完成您想要的事情并不难。但是,如果您做得正确,则需要考虑是否要:

  • [indexOflastIndexOfcontains一致
  • equals(Object)的语义要一致
  • sublist(int, int)返回的列表的语义一致)>

0
投票

没有contains()除了使用Object.equals以外不能做其他任何事情,因为这是规范所必需的。

© www.soinside.com 2019 - 2024. All rights reserved.