java集合接口
核心的接口是被封裝為不同類型的集合,如下圖所示。這些接口允許集合去操作獨立的細(xì)節(jié)和實現(xiàn)爪幻。核心的集合接口是java集合框架的基礎(chǔ)。正如你在下圖看到的须误,這些核心接口來自于一個層次關(guān)系挨稿。
Set
是一個特定類型的集合,SortedSet
是一個特定類型的Set京痢。從上圖可以看到奶甘,有兩顆分開的樹,[map
][3]不是一個真正的Collection
祭椰。
所有的核心集合接口都是通用的臭家,例如疲陕,下面是[Collection][1]的接口聲明:
public interface Collection<E>...
<E>
語法告訴你這個接口是通用的。當(dāng)你聲明一個集合實例的時候钉赁,你應(yīng)該指定這個集合中包含對象的類型蹄殃。指定類型的好處是,在編譯時你踩,允許編譯器去校驗?zāi)?code>put到集合的對象是否時正確的诅岩,減少了運行時錯誤。
當(dāng)你知道如何使用這些接口的時候姓蜂,你將會明白更多的有關(guān)java集合框架的東西按厘。
下面的列表描述了核心的集合接口
- **Collection ** 集合接口層次的最頂層接口。集合表示為一組對象钱慢。
Collection
接口是所有集合實現(xiàn)的最小單位。封裝了所有集合的最通用性的操作卿堂。一些類型的集合允許重復(fù)元素束莫,而其他不允許。有些是有序的草描,有些是無須的览绿。java平臺不提供任何該接口的直接實現(xiàn),而是提供更具體的子接口的實現(xiàn)穗慕,比如Set
和List
.具體請看The Collection Interface. - Set 不能包含重復(fù)元素的集合饿敲,是對數(shù)學(xué)上的集合進(jìn)行的抽象。請參考The Set Interface
- **list ** 一個排序的集合逛绵。有時被稱為序列怀各。可以包含重復(fù)的對象术浪,可以通過索引定位到元素瓢对。請參考The List Interface
- Queue 用于在處理之前保存多個元素的集合。除了基本的集合操作之外胰苏,隊列提供額外的插入硕蛹,提取和檢查操作。隊列通常但不一定以FIFO(先進(jìn)先出)方式對元素排序硕并。比如法焰,優(yōu)先級隊列,其根據(jù)提供的比較器或元素的自然排序來排序元素倔毙。無論使用什么排序埃仪,隊列的頭部都是通過調(diào)用remove或poll來刪除的元素。在FIFO隊列中普监,所有新元素都插入到隊列的尾部贵试。其他類型的隊列可以使用不同的布置規(guī)則琉兜。每個隊列實現(xiàn)必須指定其排序?qū)傩浴A碚垍㈤嗞犃薪涌诓糠直胁!U垍⒄?a target="_blank" rel="nofollow">The Queue Interface
-
Deque 用于在處理之前保存多個元素的集合豌蟋。除了基本的收集操作,
Deque
還提供額外的插入桑滩,提取和檢查操作梧疲。Deques
可以用作FIFO(先進(jìn)先出)和LIFO(后進(jìn)先出)。在deque
中运准,所有新元素可以在兩端插入幌氮,檢索和刪除。另請參閱Deque接口
部分胁澳。請參照The Deque interface -
Map 將鍵映射到值的對象该互。
map
中不能包含重復(fù)的鍵;每個鍵可以映射到至多一個值。如果你已經(jīng)使用Hashtable
韭畸,你已經(jīng)熟悉了Map的基礎(chǔ)知識宇智。另見地圖界面部分。請參照The Map Interface
最后兩個核心的集合接口是Set
和Map
的排序版本
SortedSet
一個有序的Set集合胰丁,默認(rèn)排序為升序随橘。提供了一些操作去利用這個順序。用于自然排序的集合锦庸,例如單詞列表和成員資格卷机蔗。另請參見SortedSet
接口部分。-
SortedMap
一個有序的Map集合甘萧,默認(rèn)排序為升序萝嘁。這是一個類似SortedSet
的map。用于自然排序的鍵值對組合幔嗦,比如詞典或者是電話薄酿愧。想了解有序集合接口維護(hù)內(nèi)部元素順序的原因,請參考
Object Ordering
Collection
Collection是最基本的集合接口邀泉,一個Collection代表一組Object嬉挡,即Collection的元素(Elements)。一些 Collection允許相同的元素而另一些不行汇恤。一些能排序而另一些不行庞钢。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set因谎。
所有實現(xiàn)Collection接口的類都必須提供兩個標(biāo)準(zhǔn)的構(gòu)造函數(shù):無參數(shù)的構(gòu)造函數(shù)用于創(chuàng)建一個空的Collection基括,有一個 Collection參數(shù)的構(gòu)造函數(shù)用于創(chuàng)建一個新的Collection,這個新的Collection與傳入的Collection有相同的元素财岔。后 一個構(gòu)造函數(shù)允許用戶復(fù)制一個Collection风皿。
如何遍歷Collection中的每一個元素河爹?不論Collection的實際類型如何,它都支持一個iterator()的方法桐款,該方法返回一個迭代子咸这,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代器
while(it.hasNext()) {
Object obj = it.next(); // 得到下一個元素
}
由Collection接口派生的兩個接口是List和Set魔眨。
List
位置訪問 基于他們在列表中的索引下標(biāo)操作元素媳维。包括
get
set
add
addAll
remove
等方法;查找 查找某一個特定的對象將會返回這個對象的下標(biāo)遏暴。 比如
indexOf
和lastIndexOf
侄刽;迭代 繼承了
Iterator
,利用列表的順序?qū)傩裕?/p>-
range-view 使用
subList
方法可以對某個范圍的列表進(jìn)行操作java平臺包括了兩個
list
接口的實現(xiàn)朋凉,一個是ArrayList
,一般情況下它的性能是最好的州丹,另一個實現(xiàn)是LinkedList
,在某些情況下它的性能是好的侥啤。 -
它的一些操作
-
remove
当叭,總是remove第一次出現(xiàn)的某個特定的元素。 -
add
和addAll
,總是在集合的尾部追加這些新的元素盖灸。
-