Java一些八卦集合类
Map 和 Set關系
Map和Set事實基礎的朋友,有著千絲萬縷的聯系。
Map它可以被看作是Set延期。從何時起Set內容存儲在key-value的值當表單。這個Set實際上可以作為Map使用。反過來,Map事實上,有一個Map.Entry內部接口。而Map在存放值對時,全然不考慮value,而僅僅考慮key,因此Map也能夠看成是一個存key的Set,而value僅僅是key的附屬物。
HashMap加入元素時,依據key的hashCode進行再哈希計算得到值來決定存放位置。HashMap底層有個數組Entry[],依據hash值來決定key-value存在數組的哪個元素,而Entry[]實際上是一個table。
HashSet底層是居于HashMap來實現的。HashSet底層用HashMap來保存全部元素,這些元素作為HashMap的key,而相應的Value是一個名為PRESENT的static final的Object對象。對HashSet操作的方法都調用HashMap的方法進行操作。
元素是否反復,要同一時候推斷元素對象的hashCode()和equals(),hashCode相等且equals返還true時才覺得是反復元素,不進行替換。
TreeSet和TreeMap的關系也是非常相似的,即TreeSet底層是採用TreeMap存儲的。TreeMap採用紅黑樹的排序二叉樹來保存Map中的每一個Entry(樹節點)。
?
List的三個實現:ArrayList,Vector和LinkedList。
Vector還有個兒子Stack,Stack不過在Vector的基礎上加入了5個方法,只五個方法的代碼就將Vector變成了Stack,Stack依舊是一個Vector,它繼承了Vector的synchronized血統,都是線程安全的。從JDK1.6開始,Java提供了Deque接口并提供了實現類ArrayDeque,即使程序中須要棧這種數據結構,也不推薦使用Stack而推薦使用Deque。除非要求線程安全。
Deque是雙端隊列。是隊列但同一時候擁有棧的功能。底層都是數組實現。
Vector差點兒被ArrayList取代了,它唯一的優點是線程安全。
如今甚至為了線程安全也不用Vector了。能夠通過Collections工具類的synchronizedList()方法將一個普通的ArrayList包裝成線程安全的ArrayList。
?
ArrayList 和LinkedList
ArrayList底層是基于數組實現的。所以ArrayList創建的時候有個初始的capacity,提供了構造方法,編程者能夠在創建ArrayList時指定初始的capacity。假設沒有顯式提供capacity,那么程序默認設置為10.LinkedList是雙向列表存儲結構,不僅實現List接口,還實現Deque雙端隊列接口。
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
總結
以上是生活随笔為你收集整理的Java一些八卦集合类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css3中实现2d旋转的函数是什么
- 下一篇: linux怎么删除oracle数据库