仅对相同项目进行一次索引的Java数据结构

Chr*_*lor 2 java data-structures

以下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));

}
Run Code Online (Sandbox Code Playgroud)

给出输出

    List contains y: false
Run Code Online (Sandbox Code Playgroud)

这有意义x并且y是对不同存储器位置的引用,但是也存在它们相等的意义(它们具有相同顺序的相同元素).

在此示例中是否存在将返回true查询的数据结构list.contains(y)

Pet*_*ter 9

我不相信这是一个Java的数据结构,将返回true对于contains()如你所描述.

您可能知道,问题在于,对于Java数组,equals()只有对象标识的测试而不是大多数人会定义它的"相等".

由于在这种情况下(并且大部分时间)contains()依赖于equals()你,你仍然坚持给定的行为.

您可能必须实现一个List特别覆盖contains(),以便为Java数组提供所需的行为,可能使用Arrays.equals().

我的建议是改为使用a List而不是数组; 你有一个List<List<Integer>>.contains()应该在这种情况下工作,因为它将用于 equals()底层List实现.