为何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
相关产品推荐
相关产品推荐

