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

Gan*_*ala 2 java arraylist hashset

今天我在做一个问题,他们使用了与此类似的代码。看到这一点我很惊讶。我认为 everyHashSet存储一个对象的哈希值,答案将是 2。然而,这个问题的答案是 1。任何人都可以解释当我存储 of 对象时内部实际发生的情况HashSet以及ArrayList为什么答案是 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
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*oni 5

如果 List 的两个实例具有相同顺序的相同元素,则它们被视为“相等” 。这意味着 list1 和 list2 是“相等的”。根据该方法的一般契约,hashCode它们还必须具有相同的哈希码

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