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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻松地在Java的Collections接口中更改.contains()方法,以确保平等相关的知识,希望对你有一定的参考价值。

我想知道是否有一种方法可以轻松地在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的contains接口中修改List方法而无需创建自定义类。

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

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

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

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

以上是关于轻松地在Java的Collections接口中更改.contains()方法,以确保平等的主要内容,如果未能解决你的问题,请参考以下文章

java 一个小类,允许人们轻松地在Pastebin上创建粘贴。

如何轻松地在 C++ 中格式化我的数据表?

轻松掌握postman,愉快完成接口测试

如何轻松地在 PHP 中缩小 JS ......或其他

java中Collection与Collections的区别

Java—集合框架 Collections.sort()Comparable接口和Comparator接口