java 板


LINE

之前一直認為相同的物件們放到 HashSet, 由於內部順序是 hash 決定 取出的順序會是一樣 ex: n 個 HashSet, n 個內容相同的字串群組 (每組都有 m 個字串, 可能排列順序不同) 將這 n 個字串群組分別塞進 n 個 HashSet 取出的順序會是相同的 也就是 for (String s : 任一個 HashSet) 得到的字串順序會一樣 直到最近在 Spring Boot 寫測試 直接用 assertIterableEquals(兩個 HashSet) 有時會錯誤 將兩個 HashSet 內容印出來才發現有時候順序會不一樣 更神奇的是相同一段程式碼, 執行 2 次還會有不一樣的結果 所以 HashSet 內部順序不只和 hash 有關嗎 ? 環境 : jdk 1.8.221 Spring Boot 2.2.1.RELEASE org.junit.vintage (應該是 JUnit 5) -- ◢▇▆◣▂ 這就是人蔘●● ︷ ︷ ▅◤ ◢▆◣ ▂▃\ ██ _▏ ︽ ※※※※ ︽ ︽ ︿ ︽ ︿ ︿ ﹦︻ ▆▆▆ ︿ ※※※※ ︿ ︿ ︿ ︿ ︿ ︳﹣﹦ ﹣﹦ ︽ ※※※※ ︽ ︽ ︿ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.35.172.61 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1577360604.A.C02.html
1F:推 vavamos: 無序 12/26 20:18
2F:→ ssccg: 以API來說你不該期待Set內容是有順序的,即使實作可能變成 12/26 21:17
3F:→ ssccg: 有順序,HashSet的iterator就寫沒固定順序了 12/26 21:17
4F:→ ssccg: 有實作SortedSet的Set才會是有序的 12/26 21:25
5F:推 jej: 你原本的概念是對的 12/26 21:29
6F:→ jej: hashset在add的原始碼有呼叫hashcode 12/26 21:29
7F:→ jej: 在你的案例應該是string是final物件 12/26 21:29
MockMvc 得到的 http response, 應該不是 final 物件
8F:→ jej: 所以你不能自己刻hashcode 12/26 21:29
9F:→ jej: 試著用刻過hashcode的物件放進去hashset 12/26 21:29
10F:→ jej: 他應該會根據你的hashcode排序 12/26 21:29
11F:→ ssccg: 以理論上來說,hash table是依自己的hash function來放 12/26 21:39
12F:→ ssccg: 而且這個hash function的值域可能依當前bucket數量而變動 12/26 21:40
13F:→ ssccg: 不一定是直接用java的hashCode()的值,當然順序不一定 12/26 21:40
14F:→ ssccg: 即使自訂了hashCode也一樣 12/26 21:47
之前有測過 new HashSet<>(p) 來給定初始 size 大於 m 結果也是不一定順序相同 看來內部 bucket 數量和初始大小的關係沒有完全相關
15F:推 OriginStar: 官方文件說 12/27 17:09
16F:→ OriginStar: It makes no guarantees as to the iteration order 12/27 17:10
17F:→ OriginStar: of the set; in particular, it does not guarantee 12/27 17:10
18F:→ OriginStar: that the order will remain constant over time. 12/27 17:10
19F:→ OriginStar: 沒有保證每次call都會傳回一致順序的內容 12/27 17:11
※ 編輯: obelisk0114 (73.35.172.61 美國), 12/27/2019 17:50:00
20F:推 handsomeLin: hashset幾乎所有語言都無序吧 包括hashmap 12/28 14:57







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP