天天看點

Java集合知識點總結

1、集合部落格 (一個優秀的部落格)

http://www.cnblogs.com/skywang12345/p/3323085.html

2、Java中的集合類及關系圖

  • Collection和Map是Java集合架構的根接口。
    • List接口和Set接口繼承自Collection接口。
    • Set無序不允許元素重複。
      • HashSet (無序)
      • TreeSet (有序)
    • List有序且允許元素重複。
      • ArrayList
      • LinkedList
      • Vector
  • Map也屬于集合系統,但和Collection接口沒關系。Map是key對value的映射集合,其中key列就是一個集合。key不能重複,但是value可以重複。
    • HashMap (無序)
    • TreeMap (有序)
    • WeakHashMap
    • Hashtable (無序,線程安全)
  • SortedSet和SortedMap接口對元素按指定規則排序,SortedMap是對key列進行排序。
Java集合知識點總結

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://blog.csdn.net/hbtj_1216/article/details/76019686
  • 紅黑樹 http://www.cnblogs.com/skywang12345/p/3245399.html
  • HashMap中(tab.length - 1) & hash 妙解: http://blog.csdn.net/hbtj_1216/article/details/76623754

不正當使用HashMap導緻cpu 100%的問題(多線程中)

http://ifeve.com/hashmap-infinite-loop/

4、HashTable源碼分析

  • Hashtable源碼解析——JDK1.8 http://blog.csdn.net/hbtj_1216/article/details/76150620

5、HashMap和Hashtable的差別

HashMap和Hashtable的差別 http://blog.csdn.net/hbtj_1216/article/details/76166472

LinkedHashMap源碼解析

http://www.jianshu.com/p/0bff048cd71f

TreeMap源碼解析

http://www.jianshu.com/p/fc5e16b5c674

WeakHashMap實作原理

http://www.cnblogs.com/skywang12345/p/3311092.html

http://www.jianshu.com/p/73df62c62cda

6、ArrayList、LinkedList、Vector、CopyOnWriteArrayList源碼解析

  • fail-fast的原理 http://www.cnblogs.com/skywang12345/p/3308762.html
  • ArrayList源碼解析——JDK1.8 http://blog.csdn.net/hbtj_1216/article/details/76169259
  • LinkedList源碼解析——JDK1.8 http://blog.csdn.net/hbtj_1216/article/details/76180754
  • Vector源碼解析——JDK1.8 http://www.cnblogs.com/skywang12345/p/3308833.html
  • CopyOnWriteArrayList源碼解析——JDK1.8 http://blog.csdn.net/hbtj_1216/article/details/76186026

7、ArrayList和Vector差別

  • ArrayList和Vector都實作了List接口,都是通過數組實作的。
  • ArrayList是非線程安全的, Vector是線程安全的。
  • List第一次建立的時候,會有一個初始大小,随着不斷向List中增加元素,當List 認為容量不夠的時候就會進行擴容。ArrayList增長原來的50%,Vector預設情況下自動增長原來一倍的數組長度。

8、ArrayList和LinkedList差別及使用場景

  • 差別
    1. ArrayList底層是用數組實作的,可以認為ArrayList是一個可改變大小的數組, 查找速度快。随着越來越多的元素被添加到ArrayList中,其大小是動态增加的。
    2. LinkedList底層是通過雙向連結清單實作的, LinkedList和ArrayList相比,增删的速度較快。但是查詢和修改值的速度較慢。同時,LinkedList還實作了Queue接口,是以他還提供了offer(),peek(), poll()等方法。
  • 使用場景
    1. ArrayList更适合快速檢索、以及在末尾插入或删除(數組的特性)。
    2. LinkedList更适合從中間插入或者删除(連結清單的特性)。

18.Collection和Collections的差別

  • java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實作。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。
  • java.util.Collections 是一個包裝類,工具類。它包含有各種有關集合操作的靜态多态方法。此類不能執行個體化,就像一個工具類,服務于Java的Collection架構。

19、ConcurrentHashMap源碼分析(★★★)

ConcurrentHashMap源碼分析——JDK1.7:http://blog.csdn.net/hbtj_1216/article/details/76205903

ConcurrentHashMap源碼分析——JDK1.8 : http://www.jianshu.com/p/c0642afe03e0

ConcurrentHashMap1.7和1.8的不同實作 : http://www.jianshu.com/p/e694f1e868ec

CAS(Compare And Swap)詳解: http://www.jianshu.com/p/fb6e91b013cc