1培他、集合博客 (一個優(yōu)秀的博客)
http://www.cnblogs.com/skywang12345/p/3323085.html
2鹃两、Java中的集合類及關系圖
-
Collection和Map是Java集合框架的根接口。
List接口和Set接口繼承自Collection接口舀凛。
-
Set無序不允許元素重復俊扳。
- HashSet (無序)
- TreeSet (有序)
-
List有序且允許元素重復。
- ArrayList
- LinkedList
- Vector
-
Map也屬于集合系統(tǒng)猛遍,但和Collection接口沒關系馋记。Map是key對value的映射集合,其中key列就是一個集合懊烤。key不能重復恰画,但是value可以重復物邑。
- HashMap (無序)
- TreeMap (有序)
- WeakHashMap
- Hashtable (無序,線程安全)
SortedSet和SortedMap接口對元素按指定規(guī)則排序,SortedMap是對key列進行排序焕妙。
3吃挑、HashMap源碼分析(★★★)
- HashMap源碼分析——JDK1.6 http://www.cnblogs.com/skywang12345/p/3310835.html
- HashMap源碼分析——JDK1.7 http://blog.csdn.net/crazy1235/article/details/75451812
- HashMap源碼分析——JDK1.8
http://www.reibang.com/p/04d8502179c1 - 紅黑樹 http://www.cnblogs.com/skywang12345/p/3245399.html
- HashMap中(tab.length - 1) & hash 妙解:
http://www.reibang.com/p/2d86f83d1d26
不正當使用HashMap導致cpu 100%的問題(多線程中)
http://ifeve.com/hashmap-infinite-loop/
4恩够、HashTable源碼分析
- Hashtable源碼解析——JDK1.8
http://www.reibang.com/p/2ee406c2aedf
5钠乏、HashMap和Hashtable的區(qū)別
HashMap和Hashtable的區(qū)別
http://www.reibang.com/p/b60eff8b5d74
LinkedHashMap源碼解析
http://www.reibang.com/p/0bff048cd71f
TreeMap源碼解析
http://www.reibang.com/p/fc5e16b5c674
WeakHashMap實現(xiàn)原理
http://www.cnblogs.com/skywang12345/p/3311092.html
http://www.reibang.com/p/73df62c62cda
6、ArrayList墩划、LinkedList涕刚、Vector、CopyOnWriteArrayList源碼解析
- fail-fast的原理 http://www.cnblogs.com/skywang12345/p/3308762.html
- ArrayList源碼解析——JDK1.8
http://www.reibang.com/p/c3ab140547be - LinkedList源碼解析——JDK1.8
http://www.reibang.com/p/1f579e8dbae4 - Vector源碼解析——JDK1.8 http://www.cnblogs.com/skywang12345/p/3308833.html
- CopyOnWriteArrayList源碼解析——JDK1.8
http://www.reibang.com/p/9e72856443b3
7乙帮、ArrayList和Vector區(qū)別
- ArrayList和Vector都實現(xiàn)了List接口杜漠,都是通過數(shù)組實現(xiàn)的。
- ArrayList是非線程安全的, Vector是線程安全的驾茴。
- List第一次創(chuàng)建的時候盼樟,會有一個初始大小,隨著不斷向List中增加元素锈至,當List 認為容量不夠的時候就會進行擴容晨缴。ArrayList增長原來的50%,Vector缺省情況下自動增長原來一倍的數(shù)組長度峡捡。
8击碗、ArrayList和LinkedList區(qū)別及使用場景
-
區(qū)別
ArrayList底層是用數(shù)組實現(xiàn)的,可以認為ArrayList是一個可改變大小的數(shù)組, 查找速度快们拙。隨著越來越多的元素被添加到ArrayList中稍途,其大小是動態(tài)增加的。
LinkedList底層是通過雙向鏈表實現(xiàn)的砚婆, LinkedList和ArrayList相比械拍,增刪的速度較快。但是查詢和修改值的速度較慢装盯。同時坷虑,LinkedList還實現(xiàn)了Queue接口,所以他還提供了offer(),peek(), poll()等方法埂奈。
-
使用場景
- ArrayList更適合快速檢索迄损、以及在末尾插入或刪除(數(shù)組的特性)。
- LinkedList更適合從中間插入或者刪除(鏈表的特性)挥转。
18.Collection和Collections的區(qū)別
java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法共屈。Collection接口在Java 類庫中有很多具體的實現(xiàn)绑谣。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。
java.util.Collections 是一個包裝類拗引,工具類借宵。它包含有各種有關集合操作的靜態(tài)多態(tài)方法。此類不能實例化矾削,就像一個工具類壤玫,服務于Java的Collection框架。
19哼凯、ConcurrentHashMap源碼分析(★★★)
ConcurrentHashMap源碼分析——JDK1.7: http://www.reibang.com/p/17eedb5f26d4
ConcurrentHashMap源碼分析——JDK1.8 : http://www.reibang.com/p/c0642afe03e0
ConcurrentHashMap1.7和1.8的不同實現(xiàn) : http://www.reibang.com/p/e694f1e868ec
CAS(Compare And Swap)詳解: http://www.reibang.com/p/fb6e91b013cc