课程
/后端开发
/Java
/Java入门第三季
添加Set之前代码运行正常,结果也正常。添加set之后,没有报错,但我选择课程2、1、4,输出的还是2、1、4,顺序没有变啊 不知道为什么
2016-04-05
源自:Java入门第三季 4-11
正在回答
找到原因了,
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来源:知乎著作权归作者所有,转载请联系作者获得授权。
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部分代码中的循环次数增加一点,不要只限定输入三次,就看出效果了
慕函数4910142
我百度了下,貌似JDK8(不知道从JDK几开始,我是JDK8)的HashSet、HashMap实现变了。元素插入的的时候,hash表是用算法把不同的数据按照规则放在响应的地址里,所以根据hash表的遍历去找的话,无论怎么放,位置是一定的,并且遍历的方式也是一定的。
题主可以换成老版本的JDK试试,再看看效果
我的也是这个情况,没有无序的效果,怀疑是Java8改进的地方吧
迩丶眼眸里 提问者
举报
Java中你必须懂得常用技能,不容错过的精彩,快来加入吧
1 回答我输入的2 、1、4 结果还是2 、1、 4 试了三次都一样 这是为什么呢
2 回答hashset的遍历真的是无序的吗?遍历了100次都是同样的顺序!产生质疑。
4 回答为什么我程序输出不是无序的??
1 回答为什么我测试不出set的无序
5 回答为什么遍历SET出来的是有序的,试了很多次都是这样