根據需求一共有這麼幾種東東:
List
Map
Set
Dictionary
Queue
List這個用的最多,就是一個有序的列表
Map key-value 對
set 無序列表
Dictionary 完全可以被Map替代
Queue 隊列
實現
所有的實現都是基於數組或者鏈表實現的,或者數組+鏈表 鏈表+數組
鏈表插入刪除速度快,數組查詢快省內存
List包含子類有:
AbstractList
注意這裏會有一些東西寫的比較奇怪,比如AbstractList繼承自AbstractCollection,實現了List接口,
並且list還實現了Collection的接口。這是因爲java不支持多繼承。代碼想讓List是接口,而不是抽象類。
這裏只是爲了代碼複用罷了
這裏我們大概可以這麼理解,AbstractList這個就是爲list的實現提供了部分的必要函數,其實沒啥亂用,關鍵還是那個遍歷器。
下面我們分析一下所有的實現類
ArrayList 就是一個數組,需要時候擴容,插入需要複製後面的部分。
RandomAccess 這是僅僅是接口,只是用來查詢時候,方式不同
LinkedList 這是通過鏈表實現的,順手實現了Queue接口。
Vector 這個就是一個線程安全的ArrayList.沒什麼可以說的
Stack 繼承自 Vector 原理一個毛樣。多了棧的一些方法
進入核心map
HashMap 數組+鏈表
TreeMap 二叉樹
Hashtable 線程安全的HashMap
SortedMap
下面關注一下set。
set是無序的,看下實現
HashSet 這個是HashMap來存貯的
TreeSet 就是TreeMap實現的。
LinkedHashSet 他就是HashSet 的子類,貌似只在查找時候纔不一樣
所以set基本就是其他的封裝。