为了账号安全,请及时绑定邮箱和手机立即绑定

​为什么在Set集合中,我每次输入课程序号,每次输出都一样。

​为什么在Set集合中,我每次输入课程序号,每次输出都一样。

最终幻想ssd 2016-07-15 15:45:56
为什么在Set集合中,我每次输入课程序号,每次输出都一样,不是说Set集合是无序的吗,而且输出结果还和我输入顺序一样,求解。
查看完整描述

4 回答

?
看风景非凡

TA贡献9条经验 获得超11个赞

Set集合的无序指的是它不保存元素的加入顺序,例如你往a数组中存数据第一个是1、第二个是2,那么他的位置就是不变的,即a[0]=1,a[1]=2,而Set集合则是你虽然是第一个存进来,但你的存储位置却不是第一个位置,而是根据每个对象的哈希码值用“固定”的算法算出它的存储索引,这也就是为什么你输入多次,每次输出一样的原因。即不保存加入顺序,但你在集合里的存储顺序却不变。

查看完整回答
2 反对 回复 2016-07-15
  • 最终幻想ssd
    最终幻想ssd
    但是我这个输出顺序输入顺序一样,比如我输入顺序1,5,2输出顺序也是1,5,2?
  • qq_呼延_0
    qq_呼延_0
    这个问题解决没啊,小弟求告知
  • 最终幻想ssd
    最终幻想ssd
    目前理解为什么每次输出结果一样,可以从以下角度理解: 所谓无序(unordered),就是 Java 语言没有规定 HashSet 按什么顺序遍历。你应该知道,有好多种 Java 虚拟机。有的运行在Windows上,有的运行在 Linux上。即使在同一个平台上,也会有好几种虚拟机。每种虚拟机对 HashSet的实现都是不一样的,所以每种虚拟机对 HashSet 的遍历顺序可能都不太一样。但对同一种虚拟机来说,你的遍历输出都是一样的。 Java 是跨派台的,你写的程序可能会在不同的平台上运行,这些平台上的虚拟机都是不一样的。如果你选用了 HashSet,就要明白,在不同的平台上,遍历顺序可能会不一样。如果你对遍历顺序有要求,就要考虑使用有序的,或排序的容器。 但是,为什么输出顺序和我输入顺序是一样的,还不是很理解,按照哈希算法的话,应该是随机分配存储位置才对,而我这个就是按照输入顺序输出,要么就有这种说法,这是一种巧合,实际并不是按照我输入顺序存储,只是输出的时候正好是按照我输入的顺序输出
?
冰山点水

TA贡献109条经验 获得超149个赞

这里的无序是并不是每次排序都不一样,而是set集合会按照自己的哈希算法来排序

查看完整回答
反对 回复 2016-07-15
  • 最终幻想ssd
    最终幻想ssd
    但是在java第三季中,4-11节老师演示的时候输入同样的顺序,输出顺序不一样
?
最终幻想ssd

TA贡献4条经验 获得超2个赞

试过了,还是一样的结果。


查看完整回答
反对 回复 2016-07-15
?
KXFT

TA贡献113条经验 获得超58个赞

你多添加几个数据试试

查看完整回答
反对 回复 2016-07-15
  • 4 回答
  • 1 关注
  • 2051 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信