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