所以,想要確保有序並且集合中無重複元素,用HashTree穩妥。通常插入HashSet的是Integer,其hashCode()實現就返回int值本身。所以在物件hashCode這一步引入了巧合的“按大小排序”。然後HashMap.hash(Object)獲取了物件的hashCode()之後會嘗試進一步混淆。JDK8版java.util.HashMap內的hash演算法比JDK7版的混淆程度低;在[0, 2^32-1]範圍內經過HashMap.hash()之後還是得到自己。單純插入數字則正好落入這個範圍內。外加load factor正好在此例中讓這個HashMap沒有hash衝突,這就導致例中元素正好按大小順序插入在HashMap的開放式雜湊表裡。這裡修改把插入的數字先加上2的16次方,然後拿出來再減去2的16次方。public class Test {HashSet輸出:TreeSet輸出:
所以,想要確保有序並且集合中無重複元素,用HashTree穩妥。通常插入HashSet的是Integer,其hashCode()實現就返回int值本身。所以在物件hashCode這一步引入了巧合的“按大小排序”。然後HashMap.hash(Object)獲取了物件的hashCode()之後會嘗試進一步混淆。JDK8版java.util.HashMap內的hash演算法比JDK7版的混淆程度低;在[0, 2^32-1]範圍內經過HashMap.hash()之後還是得到自己。單純插入數字則正好落入這個範圍內。外加load factor正好在此例中讓這個HashMap沒有hash衝突,這就導致例中元素正好按大小順序插入在HashMap的開放式雜湊表裡。這裡修改把插入的數字先加上2的16次方,然後拿出來再減去2的16次方。public class Test {HashSet輸出:TreeSet輸出: