java的集合類有哪些他們之間的關系有什麽區別
Java API中所用的集合類,都是實現了Collection接口,他的一個類繼承結構如下:
Collection<--List<--Vector 數組實現 查詢快、增刪慢
Collection<--List<--ArrayList 數組實現 查詢快、增刪慢
Collection<--List<--LinkedList 鏈表結構 查詢慢、增刪快
Collection<--Set<--HashSet 自定義排序 對對象實現Comparable 重寫compareTo(Object o);
Collection<--Set<--HashSet<--LinkedHashSet 按照存放時的順序 輸出
Collection<--Set<--SortedSet<--TreeSet
Vector : 基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能
超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“sychronized”的,這個也是Vector和
ArrayList的唯一的區別。
ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但
是當運行到多線程環境中時,可需要自己在管理線程的同步問題。
LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方
面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像
基於Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。
List總結:
1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是
在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。
集合中,list set Map
set 無序,元素不可以重復
HashSet : 無序,元素不重復,如果是自定義實體對象,需要重寫 hashCode() 和equals(Object obj)
TreeSet:自定義排序 對對象實現Comparable 重寫compareTo(Object o);
Map 以鍵值對形式存儲
HashMap :會自動排序,鍵可以為null
LinkedHashMap 按照存放時的順序 輸出
List 有順序、有下標、元素可以重復。
ArrayList【重點】
數組實現 查詢快、增刪慢
jdk1.2 線程不安全,效率高
2) Vector
數組實現 查詢快、增刪慢
jdk1.0 線程安全、效率低
3) LinkedList
鏈表結構 查詢慢、增刪
java的集合類有哪些他們之間的關系有什麽區別