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

来源:4-11 学生选课---通过 Set 集合管理课程

迩丶眼眸里

2016-04-05 14:05

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

写回答 关注

4回答

  • 慕函数4910142
    2016-11-24 17:25:06

    找到原因了,

    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
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。


  • H慢灵魂H
    2016-04-22 20:02:08
    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部分代码中的循环次数增加一点,不要只限定输入三次,就看出效果了

    慕函数491...

    次数多了虽然第一次不一样,当你重新运行时还是和你第一次顺序一致

    2016-11-24 17:21:05

    共 1 条回复 >

  • 奈奈丸
    2016-04-11 16:21:04

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

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

  • Wayaye
    2016-04-05 15:07:38

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

    迩丶眼眸里

    这个程序,还有5-2的MapTest程序都不是乱序输出,郁闷

    2016-04-05 15:16:55

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题