以下 Java 代码:
public static void main(String args[]) {
int[] x = new int[] {1, 2, 3};
int[] y = new int[] {1, 2, 3};
LinkedList<int[]> list = new LinkedList<int[]>();
list.add(x);
System.out.println("List contains y: " + list.contains(y));
}
给出输出
List contains y: false
这是有道理的,因为x
和y
是对不同内存位置的引用,但是它们也有相等的意义(它们在相同的顺序)。
在此示例中,是否有一个数据结构可以向查询 list.contains(y)
返回 true
?
最佳答案
我不相信有一个 Java 数据结构会返回 true
对于 contains()
正如您所描述的。
正如您可能知道的那样,问题是对于 Java 数组, equals()
仅测试对象身份,而不测试大多数人定义的“相等”。
自 contains()
依赖equals()
在这种情况下(大多数情况下),您会陷入给定的行为。
您必须实现 List
专门覆盖 contains()
为 Java 数组提供所需的行为,可能使用 Arrays.equals()
.
我的建议是改用 List
而不是数组;然后你就会有一个 List<List<Integer>>
。 contains()
应该在这种情况下工作,因为它将使用 equals()
在底层List
实现。
关于Java数据结构只对相同的项目索引一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146101/