Java数据结构只对相同的项目索引一次

标签 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));

}

给出输出

    List contains y: false

这是有道理的,因为xy是对不同内存位置的引用,但是它们也有相等的意义(它们在相同的顺序)。

在此示例中,是否有一个数据结构可以向查询 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/

相关文章:

JavascriptencodeURIComponent和Java解码问题

java - 如何使用 webdriver/Java 检查字段旁边的增加计数?

java - 如何在Java中的表的列中添加复选框

c++ - 如何在此自定义堆栈实现中正确分配更多内存?

java - 创建一个支持 "snapshots"的 ConcurrentHashMap

data-structures - 基于磁盘的特里?

java - 如何修复struts漏洞

java - 从文件将文件添加到集合框架

c - 链表 - 追加节点 : loop or pointer?

c - C中的malloc函数