问答详情
源自:4-11 学生选课---通过 Set 集合管理课程

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

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

提问者:迩丶眼眸里 2016-04-05 14:05

个回答

  • 慕函数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部分代码中的循环次数增加一点,不要只限定输入三次,就看出效果了

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

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

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

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

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