1. 程式人生 > >java的集合類有哪些他們之間的關系有什麽區別

java的集合類有哪些他們之間的關系有什麽區別

jh

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 : 基於ArrayList,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能

超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“sychronized”的,這個也是Vector

ArrayList的唯一的區別。

ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但

是當運行到多線程環境中時,可需要自己在管理線程的同步問題。



LinkedListLinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方

面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像

基於ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。

List總結:

1. 所有的List中只能容納單個不同類型的對象組成的表,而不是KeyValue鍵值對。例如:[ tom,1,c ]

2. 所有的List中可以有相同的元素,例如
Vector中可以有 [ tom,koo,too,koo ]


3. 所有的List中可以有null元素,例如[ tom,null,1 ]

4. 基於ArrayListVectorArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。

HashSet:雖然SetList都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是

HashMap的基礎上來實現的,這個就是SetList的根本區別。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的集合類有哪些他們之間的關系有什麽區別