java - ArrayList 对象如何存储在 Java 中的 HashSet 中?

标签 java arraylist hashset

今天我在做一个问题,他们使用了类似的代码。 我很惊讶地看到这一点。我以为每个 HashSet 都存储一个对象的哈希值,答案应该是 2。然而,这个答案是 1。 谁能解释当我存储对象的 ArrayListHashSet 时内部实际发生了什么,以及为什么答案是 1 而不是 2?

import java.io.*;
import java.util.*;

class Code {
    public static void main (String[] args) {
        
        HashSet<ArrayList<Integer>> set=new HashSet<>();
        ArrayList<Integer> list1=new ArrayList<>();
        ArrayList<Integer> list2=new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list2.add(1);
        list2.add(2);
        set.add(list1);
        set.add(list2);
        System.out.println(set.size()); // 1
    }
}

最佳答案

如果 List 的两个实例具有 the same elements in the same order,则它们被认为是“相等的” .所以这意味着 list1 和 list2 是“相等的”。根据 hashCode 方法的一般约定,它们也必须具有相同的哈希码

HashSet 不存储重复的项目:如果你给它两个相同的项目,它只存储第一个。所以这里它只存储 list1。

关于java - ArrayList 对象如何存储在 Java 中的 HashSet 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62980011/

相关文章:

java - JSon 根据应用于其他节点的条件选择节点?

java - 第一个列表已排序,另一个未排序,这是合并两个列表的更好方法

java - 为什么 ArrayList 副本的行为与整数副本不同?

Java HashSet 保留第一个和最后一个元素

java - 为什么 java.util.HashSet 没有 get(Object o) 方法?

java - 如何在空的 iReport 中将 TableModel 设置为 DataSource (NetBeans 7.1)

java - 阻止 objectweb asm 用 throw 替换无法访问的代码

java - 为什么我的 Java Applet 中的 Swing 在鼠标快速悬停时会闪烁?

java - 无法弄清楚如何按这些条件对列表进行排序

c# - 迭代 HashSet 时更改项的值