我想知道是否有一种方法可以轻松地在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
以外不能做其他任何事情,因为这是规范所必需的。