[語法] 相同的物件們放到 HashSet 取出的順序
之前一直認為相同的物件們放到 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://www.ptt.cc/bbs/java/M.1577360604.A.C02.html
推
12/26 20:18,
4年前
, 1F
12/26 20:18, 1F
→
12/26 21:17,
4年前
, 2F
12/26 21:17, 2F
→
12/26 21:17,
4年前
, 3F
12/26 21:17, 3F
→
12/26 21:25,
4年前
, 4F
12/26 21:25, 4F
推
12/26 21:29,
4年前
, 5F
12/26 21:29, 5F
→
12/26 21:29,
4年前
, 6F
12/26 21:29, 6F
→
12/26 21:29,
4年前
, 7F
12/26 21:29, 7F
MockMvc 得到的 http response, 應該不是 final 物件
→
12/26 21:29,
4年前
, 8F
12/26 21:29, 8F
→
12/26 21:29,
4年前
, 9F
12/26 21:29, 9F
→
12/26 21:29,
4年前
, 10F
12/26 21:29, 10F
→
12/26 21:39,
4年前
, 11F
12/26 21:39, 11F
→
12/26 21:40,
4年前
, 12F
12/26 21:40, 12F
→
12/26 21:40,
4年前
, 13F
12/26 21:40, 13F
→
12/26 21:47,
4年前
, 14F
12/26 21:47, 14F
之前有測過 new HashSet<>(p) 來給定初始 size 大於 m
結果也是不一定順序相同
看來內部 bucket 數量和初始大小的關係沒有完全相關
推
12/27 17:09,
4年前
, 15F
12/27 17:09, 15F
→
12/27 17:10,
4年前
, 16F
12/27 17:10, 16F
→
12/27 17:10,
4年前
, 17F
12/27 17:10, 17F
→
12/27 17:10,
4年前
, 18F
12/27 17:10, 18F
→
12/27 17:11,
4年前
, 19F
12/27 17:11, 19F
※ 編輯: obelisk0114 (73.35.172.61 美國), 12/27/2019 17:50:00
推
12/28 14:57,
4年前
, 20F
12/28 14:57, 20F
java 近期熱門文章
PTT數位生活區 即時熱門文章