Java中有關數據結構的類都在java.util包中,集合框架是每一個程序員都應該熟練掌握的一個類庫。Java的集合框架可以提供處理對象的標準方式。在很早的jdk版本中,只提供了Dictionary、Vector、Stack、Properties來存儲和操作對象。這些類之間沒有統一的api,使用這些類達不到易擴展的作用。
當然我們使用這些數據結構目的也是為了使用方便,能夠提供高效的存取。學過數據結構的朋友們都知道,鏈表和哈希表的結構的效率都是較高的。為了使用不同的集合之間能夠相互操作,相互擴展,那么使用通用的接口將是一個較好的選擇。所以整個集合框架被設計成了一系列的標準的接口。在Collections類中有許多靜態的算法方法。Iterator迭代器接口提供了通用的訪問集合元素的方式,因為每一個集合都實現了Iterator接口。除了集合,還提供了映射的接口和類。比方說Map就提供了存儲鍵值對。雖然它不是集合,但也被整合到了集合中。目前所有的集合都是基于泛型的。
下面介紹集合框架中的幾個常用的接口:
1.Collection 允許處理一組對象,位于集合層次結構的頂部
2.List 擴展Collection接口以處理序列
3.Queue 擴展Collection接口以處理列表中的特殊類型,其元素只能從前面刪除
4.Set 擴展Collection接口以處理集合,集合中的元素必須是唯一的
5.SortedSet 擴展Set接口以處理排序的集合
當然除了上述的接口外,集合中還使用Copmarator、Iterator、ListIterator等接口 。
Collection接口是構造集合框架的基礎,必須被定義集合的任意類實現,同樣它也是一個泛型接口。
List接口:
該接口擴展了Collection接口,它聲明集合是存儲一個序列的元素。我們可以把它看成是動態數組。學過數據結構的朋友都知道,數組可以使用基于0的索引,對于泛型的List接口而言,他可以指定保存不同的對象類型。
相對于Collection接口而言,List接口增加了add(int index, E element),add(int index,Collection c)方法,這些方法用于將元素插入到特定的位置,這也是動態數組的特性。
Set接口:
該接口擴展了Collection接口,但不允許有相同的存在的元素,而上述的List接口卻沒有此約束,其實很好理解,我們可以把它想象成數學中的集合,在那種集合中,是不允許有相同的元素的。
SortedSet接口擴展了Set接口,此接口是升序的集合,由于是有序的,所有自然其中的數據元素是有意義的,否則升序的算法無從使用起。自然就不能存在為null的對象。下表是該接口特有的方法:
Queue接口:
這個接口在1.4的版本中是沒有,新增的。看名字就知道是隊列,先進先出。
從隊列頂部刪除元素 。
當然我們使用這些數據結構目的也是為了使用方便,能夠提供高效的存取。學過數據結構的朋友們都知道,鏈表和哈希表的結構的效率都是較高的。為了使用不同的集合之間能夠相互操作,相互擴展,那么使用通用的接口將是一個較好的選擇。所以整個集合框架被設計成了一系列的標準的接口。在Collections類中有許多靜態的算法方法。Iterator迭代器接口提供了通用的訪問集合元素的方式,因為每一個集合都實現了Iterator接口。除了集合,還提供了映射的接口和類。比方說Map就提供了存儲鍵值對。雖然它不是集合,但也被整合到了集合中。目前所有的集合都是基于泛型的。
下面介紹集合框架中的幾個常用的接口:
1.Collection 允許處理一組對象,位于集合層次結構的頂部
2.List 擴展Collection接口以處理序列
3.Queue 擴展Collection接口以處理列表中的特殊類型,其元素只能從前面刪除
4.Set 擴展Collection接口以處理集合,集合中的元素必須是唯一的
5.SortedSet 擴展Set接口以處理排序的集合
當然除了上述的接口外,集合中還使用Copmarator、Iterator、ListIterator等接口 。
Collection接口是構造集合框架的基礎,必須被定義集合的任意類實現,同樣它也是一個泛型接口。
方法摘要 | ||
---|---|---|
boolean |
add(E o) 確保此 collection 包含指定的元素(可選操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。 |
|
void |
clear() 移除此 collection 中的所有元素(可選操作)。 |
|
boolean |
contains(Object o) 如果此 collection 包含指定的元素,則返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,則返回 true。 |
|
boolean |
equals(Object o) 比較此 collection 與指定對象是否相等。 |
|
int |
hashCode() 返回此 collection 的哈希碼值。 |
|
boolean |
isEmpty() 如果此 collection 不包含元素,則返回 true。 |
|
Iterator<E> |
iterator() 返回在此 collection 的元素上進行迭代的迭代器。 |
|
boolean |
remove(Object o) 從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。 |
|
boolean |
removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。 |
|
boolean |
retainAll(Collection<?> c) 僅保留此 collection 中那些也包含在指定 collection 的元素(可選操作)。 |
|
int |
size() 返回此 collection 中的元素數。 |
|
Object[] |
toArray() 返回包含此 collection 中所有元素的數組。 |
|
|
toArray(T[] a) 返回包含此 collection 中所有元素的數組;返回數組的運行時類型與指定數組的運行時類型相同。 |
該接口擴展了Collection接口,它聲明集合是存儲一個序列的元素。我們可以把它看成是動態數組。學過數據結構的朋友都知道,數組可以使用基于0的索引,對于泛型的List接口而言,他可以指定保存不同的對象類型。
方法摘要 | ||
---|---|---|
boolean |
add(E o) 向列表的尾部追加指定的元素(可選操作)。 |
|
void |
add(int index, E element) 在列表的指定位置插入指定元素(可選操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 追加指定 collection 中的所有元素到此列表的結尾,順序是指定 collection 的迭代器返回這些元素的順序(可選操作)。 |
|
boolean |
addAll(int index, Collection<? extends E> c) 將指定 collection 中的所有元素都插入到列表中的指定位置(可選操作)。 |
|
void |
clear() 從列表中移除所有元素(可選操作)。 |
|
boolean |
contains(Object o) 如果列表包含指定的元素,則返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果列表包含指定 collection 的所有元素,則返回 true。 |
|
boolean |
equals(Object o) 比較指定的對象與列表是否相等。 |
|
E |
get(int index) 返回列表中指定位置的元素。 |
|
int |
hashCode() 返回列表的哈希碼值。 |
|
int |
indexOf(Object o) 返回列表中首次出現指定元素的索引,如果列表不包含此元素,則返回 -1。 |
|
boolean |
isEmpty() 如果列表不包含元素,則返回 true。 |
|
Iterator<E> |
iterator() 返回以正確順序在列表的元素上進行迭代的迭代器。 |
|
int |
lastIndexOf(Object o) 返回列表中最后出現指定元素的索引,如果列表不包含此元素,則返回 -1。 |
|
ListIterator<E> |
listIterator() 返回列表中元素的列表迭代器(以正確的順序)。 |
|
ListIterator<E> |
listIterator(int index) 返回列表中元素的列表迭代器(以正確的順序),從列表的指定位置開始。 |
|
E |
remove(int index) 移除列表中指定位置的元素(可選操作)。 |
|
boolean |
remove(Object o) 移除列表中出現的首個指定元素(可選操作)。 |
|
boolean |
removeAll(Collection<?> c) 從列表中移除指定 collection 中包含的所有元素(可選操作)。 |
|
boolean |
retainAll(Collection<?> c) 僅在列表中保留指定 collection 中所包含的元素(可選操作)。 |
|
E |
set(int index, E element) 用指定元素替換列表中指定位置的元素(可選操作)。 |
|
int |
size() 返回列表中的元素數。 |
|
List<E> |
subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間的部分視圖。 |
|
Object[] |
toArray() 返回以正確順序包含列表中的所有元素的數組。 |
|
|
toArray(T[] a) 返回以正確順序包含列表中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
Set接口:
該接口擴展了Collection接口,但不允許有相同的存在的元素,而上述的List接口卻沒有此約束,其實很好理解,我們可以把它想象成數學中的集合,在那種集合中,是不允許有相同的元素的。
SortedSet接口擴展了Set接口,此接口是升序的集合,由于是有序的,所有自然其中的數據元素是有意義的,否則升序的算法無從使用起。自然就不能存在為null的對象。下表是該接口特有的方法:
方法摘要 | |
---|---|
Comparator<? super E> |
comparator() 返回與此有序集合關聯的比較器,如果使用元素的自然順序,則返回 null。 |
E |
first() 返回此有序集合中當前第一個(最小的)元素。 |
SortedSet<E> |
headSet(E toElement) 返回此有序集合的部分視圖,其元素嚴格小于 toElement。 |
E |
last() 返回此有序集合中最后一個(最大的)元素。 |
SortedSet<E> |
subSet(E fromElement, E toElement) 返回此有序集合的部分視圖,元素范圍從 fromElement(包括)到 toElement(不包括)。 |
SortedSet<E> |
tailSet(E fromElement) 返回此有序集合的部分視圖,其元素大于或等于 fromElement。 |
這個接口在1.4的版本中是沒有,新增的。看名字就知道是隊列,先進先出。
方法摘要 | |
---|---|
E |
element() 檢索,但是不移除此隊列的頭。 |
boolean |
offer(E o) 如果可能,將指定的元素插入此隊列。 |
E |
peek() 檢索,但是不移除此隊列的頭,如果此隊列為空,則返回 null。 |
E |
poll() 檢索并移除此隊列的頭,如果此隊列為空,則返回 null。 |
E |
remove() 檢索并移除此隊列的頭。 |