更新時間:2020-01-19 10:52:56 來源:動力節(jié)點 瀏覽2359次
Java 集合框架
早在Java 2中之前,Java就提供了特設類。比如:Dictionary, Vector, Stack, 和Properties這些類用來存儲和操作對象組。
雖然這些類都非常有用,但是它們缺少一個核心的,統(tǒng)一的主題。由于這個原因,使用Vector類的方式和使用Properties類的方式有著很大不同。
集合框架被設計成要滿足以下幾個目標:
該框架必須是高性能的。基本集合(動態(tài)數(shù)組,鏈表,樹,哈希表)的實現(xiàn)也必須是高效的。
該框架允許不同類型的集合,以類似的方式工作,具有高度的互操作性。
對一個集合的擴展和適應必須是簡單的。
為此,整個集合框架就圍繞一組標準接口而設計。你可以直接使用這些接口的標準實現(xiàn),諸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通過這些接口實現(xiàn)自己的集合。
集合框架是一個用來代表和操縱集合的統(tǒng)一架構。所有的集合框架都包含如下內容:
接口:是代表集合的抽象數(shù)據(jù)類型。接口允許集合獨立操縱其代表的細節(jié)。在面向對象的語言,接口通常形成一個層次。
實現(xiàn)(類):是集合接口的具體實現(xiàn)。從本質上講,它們是可重復使用的數(shù)據(jù)結構。
算法:是實現(xiàn)集合接口的對象里的方法執(zhí)行的一些有用的計算,例如:搜索和排序。這些算法被稱為多態(tài),那是因為相同的方法可以在相似的接口上有著不同的實現(xiàn)。
除了集合,該框架也定義了幾個Map接口和類。Map里存儲的是鍵/值對。盡管Map不是collections,但是它們完全整合在集合中。
集合框架體系如圖所示:
Java集合框架提供了一套性能優(yōu)良,使用方便的接口和類,java集合框架位于java.util包中,所以當使用集合框架的時候需要進行導包。下面介紹幾個接口中常用的接口以及實現(xiàn)類。
List接口的常用實現(xiàn)類
一個List是一個元素有序的、可以重復、可以為null的集合(有時候我們也叫它“序列”)。
ArrayList
最常用的List接口實現(xiàn)類,底層使用可變長度的動態(tài)數(shù)組實現(xiàn)。ArrayList有一個初始容量(capacity=10),當元素數(shù)量大于初始容量時進行擴容,新的數(shù)組長度=舊數(shù)組長度+舊數(shù)組長度/2。
因為每個元素都有固定的位置索引,所以根據(jù)索引查詢元素的速度非常快。如果在中間插入元素時,由于后面的元素全部要后移一位,所以性能會比較差。
由于沒有做并發(fā)訪問控制,所以它是一個非線程安全的集合。允許重復元素或null元素。
LinkedList
List接口的雙向鏈接的實現(xiàn)類,允許NULL元素。它表現(xiàn)上是一個有序的集合,但內存中其實是無序保存。
由于原因,所以它插入的速度會很快,但是查詢一個元素的速度較ArrayList速度慢很多。是一個非線程安全的集合。
Vector
Vector底層使用動態(tài)數(shù)組實現(xiàn),默認初始容量為10,可以通過構造方法指定初始容量,同時可以指定擴容時的增量。
擴容規(guī)則是指新容量=舊容量+擴容增量,若未指定擴容增量則新容量=2*舊容量。它的關鍵方法都加了synchronized,所以是一個線程安全的集合。
Set集合接口
如果是實現(xiàn)了Set接口的集合類,具備的特點:無序,不可重復
添加元素的順序與元素出來的順序是不一致的。
注重獨一無二的性質,該體系集合可以知道某物是否已近存在于集合中,不會存儲重復的元素。
hashSet
HashSet底層是使用了哈希表來支持的,特點:存取速度快。
往Hashset添加元素的時候,HashSet會先調用元素的hashCode方法得到元素的哈希值,
然后通過元素的哈希值經(jīng)過移位等運算,就可以算出該元素在哈希表中的存儲位置。
LinkedHashSet
LinkedHashSet底層使用LinkedHashMap來保存所有元素,它繼承與HashSet,其所有的方法操作上又與HashSet相同,因此LinkedHashSet的實現(xiàn)上非常簡單,只提供了四個構造方法。
并通過傳遞一個標識參數(shù),調用父類的構造器,底層構造一個LinkedHashMap來實現(xiàn),在相關操作上與父類HashSet的操作相同,直接調用父類HashSet的方法即可。
treeSet
treeSet底層是以紅-黑樹的數(shù)據(jù)結構實現(xiàn)的,默認對元素進行自然排序(String)。
如果在比較的時候兩個對象返回值為0,那么元素重復。
Map接口的常用實現(xiàn)類
Map提供了一個更通用的元素存儲方法。Map集合類用于存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。
從概念上而言,您可以將List看作是具有數(shù)值鍵的Map。而實際上,除了List和Map都在定義java.util中外,兩者并沒有直接的聯(lián)系。
本文將著重介紹核心Java發(fā)行套件中附帶的Map,同時還將介紹如何采用或實現(xiàn)更適用于您應用程序特定數(shù)據(jù)的專用Map。
HashMap
往HashMap添加元素的時候,首先會調用鍵的hashCode方法得到元素的哈希碼值,然后經(jīng)過運算就可以算出該元素在哈希表中的存儲位置。
并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。
HashTable
HashTable是同步的(synchronized函數(shù)),而HashMap不同步,所以HashTable要慢一些HashTable不接受null鍵和值。
而HashMap接受一個null鍵和無數(shù)個null值除了keySet(),entrySet(),values()這些HashMap支持的迭代之外,HashTable還支持基于Enumeration的keys(),elements(),但是在現(xiàn)在它們的實現(xiàn)都是基于一個實現(xiàn)了Enumeration和Iterator接口的類。
TreeMap
TreeMap也是基于紅黑樹(二叉樹)數(shù)據(jù)結構實現(xiàn)的,特點:會對元素的鍵進行排序存儲。
注意:Set的元素不可重復,如果set元素重復將添加不成功。
Map的鍵不可重復,如果鍵重復將直接覆蓋。
框架相關視頻教程
struts入門教程:http://www.dabaquan.cn/v36/
hibernate入門教程:http://www.dabaquan.cn/v39/
Java spring框架教程:http://www.dabaquan.cn/v38/
全套免費ssm整合視頻教程:http://www.dabaquan.cn/v92/
以上就是動力節(jié)點Java培訓機構小編介紹的“Java集合框架視頻教程,深入了解集合框架”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
相關內容