collection下面有兩個常用的子類介面,乙個是list(有序存放可重複的元素),set(存放不可重複的元素).
list介面下有三個常用的子類
arraylist:底層結構是陣列,查詢快,增刪慢,執行緒不安全,效率高
vector:底層結構是陣列,查詢和增刪慢,執行緒安全,效率低(在多執行緒環境中選用)
arraylist和vector都有乙個初始化的容量的大小,當裡面儲存的元素超過這個大小時就需要動態地擴充它們的空間.vector預設擴充為原來的兩倍(每次擴充空間的大小是可以通過方法控制的),arraylist預設擴充為原來的1.5倍(沒有提供api擴充空間)
linkedlist:,底層結構是雙向鍊錶,查詢慢,增刪快,執行緒不安全,效率高
set下有兩個常用的子類(集合中的元素不能重複)
乙個是hashset乙個是treeset,其中最常用的是hashset,
保證hashset集合元素的唯一,其實就是根據物件的hashcode和equals方法來決定的。如果我們往集合中存放自定義的物件,那麼保證其唯一,就必須複寫hashcode和equals方法建立屬於當前物件的比較方式。hashset下面有乙個子類linkedhashset,它是鍊錶和雜湊表組合的乙個資料儲存結構
.它可以存放有序不可重複的元素.其中treeset實現了sortedset介面,因此treeset存放的元素是有序且不能重複的
與collection集合繼承體系存放單列資料不同的是 ,
map儲存鍵和值這樣的雙列資料的集合
鍵是無序且不能重複的,而且資料結構都是針對於鍵
,它的值是可以有重複的。
它下面有三個常用的實現類,乙個是hashmap(基於雜湊表實現的,根據鍵的hashcode值來儲存元素,根據鍵直接獲取它的值,訪問速度很快)乙個是hashtable,還有乙個treemap(基於紅黑樹實現的,具有某一種平衡性的搜尋二叉樹,可以提供一些hashmap所提供不了的方法,如lastkey(),即樹中最後乙個元素,key為最大值;又如ceilingkey(13),得到最小的比13大的key,其中對應的還有firstkey()和floorkey(13)
hashmap()的增刪改查都是o(n),但是它要想實現treemap的lastkey和ceilingkey的功能其代價都是o(lgn)
treemap的增刪改查以及lastkey和ceilingkey的代價都是o(lgn) )
hashmap執行緒不安全,效率高,允許空鍵和空值(最多隻允許一條記錄的鍵為null)
hashtable執行緒安全,效率低,不允許空鍵和空值
hashtable和hashmap採用的hash演算法幾乎一樣,所以效能不會有很大的差異.在hashtable中,hash陣列的預設大小是11,增加的方式是old*2+1.在hashmap中,hash陣列的預設大小是16,而且一定是2的指數
treemap實現了sortmap介面,能夠把它儲存的記錄根據鍵排序,因此取出來的排序後的鍵值對
linkedhashmap是hashmap的乙個子類,有序不可重複
在hashtable中,同步指什麼?
同步意味著在乙個時間點只能有乙個執行緒可以修改hash表,任何執行緒在執行hashtable的更新操作前都需要獲取鎖物件,其他執行緒則等待鎖的釋放
如何實現hashmap的同步?
hashmap可以通過map m=collections.synchronizedmap(new hashmap()),來達到同步的效果
集合繼承體系的物件導向思想
l 介面 用來明確所有集合中該具有的功能,相當於在定義集合功能標準 l 抽象類 把多個集合中功能實現方式相同的方法,抽取到抽象類實現,具體集合不再遍寫,繼承使用即可 具體類 繼承抽象類,實現介面,重寫所有抽象方法,達到具備指定功能的集合。每個具體集合類,根據自身的資料儲存結構方式,對介面中的功能方法...
集合框架的體系
最基本的集合介面。遍歷collection集合 呼叫iterator 的方法,返回迭代子,可由迭代子直接訪問每個元素,如下 iterator it collection.iterator 獲得乙個迭代子 while it.hasnext 繼承collection的介面主要有 list,set。繼承自...
IO繼承體系
io繼承體系 reader bufferedreader reader in 輸入緩衝流 linenumberreader reader in getlinenumber setlinenumber inputstreamreader inputstream in,string charsetnam...