《瘋狂的JAVA講義》筆記-第8章集合
-
、Iterator
接口ListIterator
-
疊代時是将元素的值傳回,并不是将元素本身傳回,是以疊代時無法更改元素的值。但是可以删除Iterator
-
則擁有增删改查以及向前疊代的功能ListIterator
-
-
HashSet
類HashMap
- 通過Hash算法來確定key 或者元素不能重複的類,一般不要進行更改。因為更改了内容可能會導緻錯誤,如
傳回相等以及equals()
相同, 取出或删除的時候無法定位。hashCode()
- 如果兩個元素
相等但是hashCode()
傳回equals()
則需要在一個“桶”裡裝多個元素,會導緻性能的下降。聽說JDK8通過紅黑樹解決了這個麻煩false
- 通過Hash算法來確定key 或者元素不能重複的類,一般不要進行更改。因為更改了内容可能會導緻錯誤,如
-
、LinkedHashSet
TreeSet
-
在使用LinkedHashSet
定位元素的同時,使用連結清單來維護集合順序(以插入順序為序),是以疊代周遊很快,插入稍慢,可滿足要求有一定順序的集合需求hasCode()
-
也是有序的,但是是按元素的實際值大小進行排序。TreeSet
-
-
EnumSet
- 占用記憶體小 ,性能好
- 要求同一個
裡都是統一的枚舉類。EnumSet
-
ArrayList
- 變長的數組,自動擴容
- 最好在添加大量資料前,使用
方法來避免多次重配置設定記憶體。ensureCapacity(int minCapacity)
initCapacity = 10
-
性能Map
- 盡量不要用
,如果要用,可通過使用TreeMap
并確定插入key-value對時有序即可LinkedHashMap
- 一般情況下,使用
,小範圍内可以使用HashMap
,要嚴格使用EnumMap
的可以使用==
,記憶體吃緊的時候可以使用IdentityHashMap
WeakHashMap
如何保證
不因擴容而浪費性能,可參照如何保證HashMap不重建Hash表HashMap
- 盡量不要用
-
工具類Collecitons
- 傳回不可變類的三個方法
-
: 傳回一個空的Xxx對象emptyXxx()
-
: 傳回隻有一個對象的不可變對象SingletonXxx(Xxx)
-
: 傳回對象的不可變對象unmodifiable(xxx)
-
- 傳回不可變類的三個方法
- 綜合
- 線程不安全的集合,可以通過
如Xxx x = Collections.synchronizedXxx(new Xxx())
來擷取線程安全的集合,當然性能會降低。List l = Collections.synchronizedList(new ArrayList())
- 如果要使用集合,則推薦使用
,除非需要根據 元素實際值進行排序才使用HashSet
TreeSet
- 線程不安全的集合,可以通過
- 各種集合的性能對比
- 底層使用數組為實作的,随機通路性能最好。底層使用連結清單為實作的,插入删除性能最佳。
- 疊代則使用連結清單更快
- 應用場景
- 當周遊時,
使用疊代器,其他使用随機通路的方式LinkedList
- 如果經常需要插入删除,則使用
;如果LinkedList
《瘋狂的JAVA講義》筆記-第8章集合《瘋狂的JAVA講義》筆記-第8章集合
- 當周遊時,