首先
1拦焚、有序性是和SortedSet有關(guān)的,實(shí)現(xiàn)這個SortedSet接口即可(常見NavigableSet杠输,是SortedSet的子類)
? ? ?有序性是指遍歷的結(jié)果是按某種比較規(guī)則依次排列的。說白了就是元素之間使用compare比較
2、穩(wěn)定性主要是和AbstractCollection有關(guān)的爬坑,間接或者直接實(shí)現(xiàn)這個抽象類即可(為什么說主要滥崩?因?yàn)楦鷋ashcode的實(shí)現(xiàn)也有關(guān))
? ??穩(wěn)定性是指集合每次遍歷的元素次序是一定的。寫入的時候是什么順序?qū)懭腽信#瑃oString的時候就是什么順序讀出(其實(shí)就是關(guān)鍵在toString這里搞糕,toString使用的就是AbstractCollection的toString)
Map<K,V> 典型的實(shí)現(xiàn)就是HashMap,它并沒有實(shí)現(xiàn)以上兩個接口或者抽象類曼追,所以是無序且不穩(wěn)定的窍仰,但是TreeMap是有序的,因?yàn)樗鼘?shí)現(xiàn)了NavigableSet
Set<T>的去重原理其實(shí)就是使用的HashMap礼殊,put的時候是K驹吮,V(V這個是固定的object),所以Set集合維護(hù)起來就是一個去重了的集合晶伦。大部分的Set子類都實(shí)現(xiàn)了AbstractSet(AbstractCollection的子類之一)碟狞,所以是具有穩(wěn)定性的。
上面提到穩(wěn)定性跟hashCode有關(guān)
舉個例子
HashSet和HashMap都是無序的婚陪,HashSet的底層實(shí)現(xiàn)其實(shí)也是HashMap(點(diǎn)擊HashSet構(gòu)造方法即可得知)族沃。即便HashSet也是繼承了AbstractCollection,因?yàn)镠ashSet和HashMap插入后都會自動排序近忙,意思是因?yàn)閷懭氲臅r候它自動排序了導(dǎo)致取值的時候跟寫入的時候順序不一樣了(具體算法就沒研究了)
而LinkedHashSet是有序的竭业,LinkedHashSet的底層實(shí)現(xiàn)是LinkedHashMap!(點(diǎn)擊LinkedHashSet構(gòu)造方法即可得知)及舍。而LinkedHashMap重寫了相關(guān)的方法如Entry的靜態(tài)內(nèi)部類等所以實(shí)現(xiàn)了有序未辆。
圖為LinkedHashMap對一些關(guān)鍵方法的重載
來實(shí)現(xiàn)底層的寫入保持了有序性
加一個執(zhí)行結(jié)果的圖
所有的寫入順序都是1,2锯玛,4咐柜,3∪敛校可以發(fā)現(xiàn)LinkedHashSet和linkedHashMap保持了有序性拙友,HashMap和HashSet都自動排序了。