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

不是说无序么,我试了好几遍还是2、1、4

添加Set之前代码运行正常,结果也正常。添加set之后,没有报错,但我选择课程2、1、4,输出的还是2、1、4,顺序没有变啊   不知道为什么

正在回答

4 回答

找到原因了,

DK8版java.util.HashMap内的hash算法比JDK7版的混淆程度低;在[0, 2^32-1]范围内经过HashMap.hash()之后还是得到自己。题主的例子正好落入这个范围内。外加load factor正好在此例中让这个HashMap没有hash冲突,这就导致例中元素正好按大小顺序插入在HashMap的开放式哈希表里。

作者:RednaxelaFX
链接:https://www.zhihu.com/question/28414001/answer/40733996
来源:知乎
著作权归作者所有,转载请联系作者获得授权。


1 回复 有任何疑惑可以回复我~
for(int i=0;i<6;i++){
  System.out.print("请输入要的课程编号:");
  String courseID=sc.next();
  for (Course temp : st.courseTo) {
      if(temp.id.equals(courseID)){
           st1.course.add(temp);
       }
   }
}

你将输入课程ID部分代码中的循环次数增加一点,不要只限定输入三次,就看出效果了

0 回复 有任何疑惑可以回复我~
#1

慕函数4910142

次数多了虽然第一次不一样,当你重新运行时还是和你第一次顺序一致
2016-11-24 回复 有任何疑惑可以回复我~

我百度了下,貌似JDK8(不知道从JDK几开始,我是JDK8)的HashSet、HashMap实现变了。元素插入的的时候,hash表是用算法把不同的数据按照规则放在响应的地址里,所以根据hash表的遍历去找的话,无论怎么放,位置是一定的,并且遍历的方式也是一定的。

题主可以换成老版本的JDK试试,再看看效果

5 回复 有任何疑惑可以回复我~

我的也是这个情况,没有无序的效果,怀疑是Java8改进的地方吧

0 回复 有任何疑惑可以回复我~
#1

迩丶眼眸里 提问者

这个程序,还有5-2的MapTest程序都不是乱序输出,郁闷
2016-04-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

不是说无序么,我试了好几遍还是2、1、4

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信