首页 > 解决方案 > ArrayList 对象如何存储在 Java 中的 HashSet 中?

问题描述

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

标签: javaarraylisthashset

解决方案


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

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


推荐阅读