HashSet对于整型和char型自动排序问题

博客探讨了在Java中使用HashSet时遇到的意外排序现象,即当插入3, 7, 6, 8, 9这样的整数时,HashSet并未保持无序状态,而是进行了排序。作者发现同样的情况也发生在char类型的数据上,虽然HashSet理论上是无序的。文章提到答案可能隐藏在HashSet的源码中,并计划进一步研究。" 108566858,9163049,使用Python制作简易小坦克,"['Python', '游戏开发', '初级教程', '编程实践']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static void main(String[] args) {
    int[] nums = new int[7];
    nums[0] = 3;
    nums[1] = 7;
    nums[2] = 6;
    nums[3] = 6;
    nums[4] = 7;
    nums[5] = 8;
    nums[6] = 9;
    Set<Integer> set = new HashSet();
    for (int i = 0; i < 7; i++){
        set.add(nums[i]);
        System.out.println(set);
    }
    System.out.println();
    System.out.println(set);

代码如上,按道理来说应该输出3,7,6,8,9,但是输出3,6,7,8,9
在这里插入图片描述

于是我一开始以为是后面那个7覆盖掉了前面那个7,但是根据每次输出一个set发现,在输入第三个数字6得时候,就自动将其排序至7得前面了。于是我很奇怪,不是说hashset是无序的吗?为什么会将6排序至7前面呢?答案在HashSet的源码里,详见
优快云上已有的博客,源码我还在研究中
而且如果输入字符类型(char) 也是一样的结果,字符类型存储的是数字。目前不知道是为什么。有时间再看hashset关于char类型的源码,先继续刷题

在这里插入图片描述
在这里插入图片描述
运行以上代码会得到和int型一样的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值