轻松地在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
以完成您想要的事情并不难。但是,如果您做得正确,则需要考虑是否要:
- [
indexOf
和lastIndexOf
与contains
一致 equals(Object)
的语义要一致sublist(int, int)
返回的列表的语义一致)>
没有contains()
除了使用Object.equals
以外不能做其他任何事情,因为这是规范所必需的。
以上是关于轻松地在Java的Collections接口中更改.contains()方法,以确保平等的主要内容,如果未能解决你的问题,请参考以下文章
java 一个小类,允许人们轻松地在Pastebin上创建粘贴。