You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何HashSet添加元素的顺序与代码中的添加顺序不一致?

聊聊你的HashSet测试代码输出问题

嘿,我来帮你理清楚这段代码的输出逻辑哈!

首先贴出你的测试代码:

import java.util.*;
public class SetDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> s1=new HashSet<String>();
        s1.add("Java");
        s1.add("C++");
        s1.add("C");
        s1.add("dotNet");
        s1.add("JavaScript");
        s1.add("Script");
        s1.add("Python");
        s1.add("JavaScript");
    }
}

你提到运行后输出结果是:

[Java, Script, C++, dotNet, C, JavaScript, Python]

这里有两个核心点要拆解:

  • 为什么输出顺序和插入顺序不一致?
    HashSet底层依赖HashMap实现存储,它会根据每个元素的hashCode()计算出的哈希值来确定存储位置,所以最终的输出顺序由元素哈希值决定,和插入先后没有直接关联。
  • 为什么重复的"JavaScript"只出现一次?
    Set集合的核心特性就是不允许重复元素,当你第二次添加"JavaScript"时,HashSet会检测到该元素的哈希值与已存在元素一致,且通过equals()方法比对也完全相同,因此会直接跳过这次添加操作。

我之前刚好查阅过相关资料,这些知识点刚好能解答你的疑问~

内容的提问来源于stack exchange,提问作者Pranav Mittal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:17:29