亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

不是說無序么,我試了好幾遍還是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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號