更新時間:2021-05-10 16:03:26 來源:動力節點 瀏覽954次
在使用Java的時候,我們都會遇到使用集合(Collection)的時候,但是Java API提供了多種集合的實現,總的說來,Java API中所用的集合類,都是實現了Collection接口,他的一個類繼承結構如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
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中可以有相同的元素,例如Vector中可以有[tom,koo,too,koo];
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的對應存儲項。看看HashSet的add(Object obj)方法的實現就可以一目了然了。
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}
這個也是為什么在Set中不能像在List中一樣有重復的項的根本原因,因為HashMap的key是不能有重復的。
LinkedHashSet:HashSet的一個子類,一個鏈表。
TreeSet:SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。
Set總結:
1.Set實現的基礎是Map(HashMap);
2.Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象
以上就是動力節點Java培訓機構的小編針對“Java中的集合你都詳細了解了嗎”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習