回覆列表
  • 1 # 程式設計頌

    先明白一個道理,不保證有序和保證無序完全不一樣!

    所以在HashSet儲存的int比較少的時候是可能出現有序的!

    為什麼幾十個數字的HashSet輸出還是有序的呢?

    版本原因

    不同版本的java在HashSet資料佈局上面可能有所差異,所以你可能會發現在jdk7版本之前資料可能是無序的,但是在jdk7版本之後資料輸出是有序的。

    hashcode

    我們知道對於int型別來說,它的hashcode就是int值本身。

    在[0,2^32-1]這個區域經過的時候,HashSet.hash()得到的還是自己本身,外加load factor在某些例子之中並未使得hash發生衝突,所以導致元素按照大小順序依次插入到HashSet的雜湊表之中。所以依次輸出會呈現從小到大排列。

  • 2 # 三僡然

    首先上面是hash的類說明,說明hash可能是無序也可能是有序。問什麼會這樣讓我們看下hashset的原始碼實現。

    hashset 底層是透過key為null的hashmap 儲存的。

    HashMap的資料結構是table[entry],entry是一個連結串列結構,資料的每個元素是一個連結串列。不同key,但是具有相同hashcode會落在table[hashcode]的連結串列上。

    但是HashMap存值的時候會根據key的hashCode()來計算儲存的位置(位置是雜湊的,所以說其無序);

    感覺有序是因為hashcode()直沒有重複。樣本太少原因

  • 中秋節和大豐收的關聯?
  • 貨幣需求量是主觀的量,貨幣供給量是客觀的量對嗎?