Java工具包提供了強大的數據結構。在Java中的數據結構主要包括如下幾種接口和類:java
枚舉(Enumeration)接口雖然它自己不屬於數據結構,但它在其餘數據結構的範疇裏應用很廣。 枚舉(The Enumeration)接口定義了一種從數據結構中取回連續元素的方式。
例如,枚舉定義了一個叫nextElement 的方法,該方法用來獲得一個包含多元素的數據結構的下一個元素。數組
Enumeration接口中定義了一些方法,經過這些方法能夠枚舉(一次得到一個)對象集合中的元素。數據結構
Enumeration接口中定義了一些方法,經過這些方法能夠枚舉(一次得到一個)對象集合中的元素。框架
序號 | 方法描述 | |
---|---|---|
1 | boolean hasMoreElements( ) | 測試此枚舉是否包含更多的元素。 |
2 | Object nextElement( ) | 若是此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素。 |
位集合類實現了一組能夠單獨設置和清除的位或標誌。
該類在處理一組布爾值的時候很是有用,你只須要給每一個值賦值一"位",而後對位進行適當的設置或清除,就能夠對布爾值進行操做了。函數
一個Bitset類建立一種特殊類型的數組來保存位值。BitSet中數組大小會隨須要增長。這和位向量(vector of bits)比較相似。
這是一個傳統的類,但它在Java 2中被徹底從新設計。工具
BitSet定義了兩個構造方法。測試
BitSet()
BitSet(int size)
BitSet中實現了Cloneable接口中定義的方法以下表所列:編碼
序號 | 方法描述 | |
---|---|---|
1 | void and(BitSet set) | 對此目標位 set 和參數位 set 執行邏輯與操做。 |
2 | void andNot(BitSet set) | 清除此 BitSet 中全部的位,其相應的位在指定的 BitSet 中已設置。 |
3 | int cardinality( ) | 返回此 BitSet 中設置爲 true 的位數。 |
4 | void clear( ) | 將此 BitSet 中的全部位設置爲 false。 |
5 | void clear(int index) | 將索引指定處的位設置爲 false。 |
6 | void clear(int startIndex, int endIndex) | 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置爲 false。 |
7 | Object clone( ) | 複製此 BitSet,生成一個與之相等的新 BitSet。 |
8 | boolean equals(Object bitSet) | 將此對象與指定的對象進行比較。 |
9 | void flip(int index) | 將指定索引處的位設置爲其當前值的補碼。 |
10 | void flip(int startIndex, int endIndex) | 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的每一個位設置爲其當前值的補碼。 |
11 | boolean get(int index) | 返回指定索引處的位值。 |
12 | BitSet get(int startIndex, int endIndex) | 返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。 |
13 | int hashCode( ) | 返回此位 set 的哈希碼值。 |
14 | boolean intersects(BitSet bitSet) | 若是指定的 BitSet 中有設置爲 true 的位,而且在此 BitSet 中也將其設置爲 true,則返回 true。 |
15 | boolean isEmpty( ) | 若是此 BitSet 中沒有包含任何設置爲 true 的位,則返回 true。 |
16 | int length( ) | 返回此 BitSet 的"邏輯大小":BitSet 中最高設置位的索引加 1。 |
17 | int nextClearBit(int startIndex) | 返回第一個設置爲 false 的位的索引,這發生在指定的起始索引或以後的索引上。 |
18 | int nextSetBit(int startIndex) | 返回第一個設置爲 true 的位的索引,這發生在指定的起始索引或以後的索引上。 |
19 | void or(BitSet bitSet) | 對此位 set 和位 set 參數執行邏輯或操做。 |
20 | void set(int index) | 將指定索引處的位設置爲 true。 |
21 | void set(int index, boolean v) | 將指定索引處的位設置爲指定的值。 |
22 | void set(int startIndex, int endIndex) | 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置爲 true。 |
23 | void set(int startIndex, int endIndex, boolean v) | 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置爲指定的值。 |
24 | int size( ) | 返回此 BitSet 表示位值時實際使用空間的位數。 |
25 | String toString( ) | 返回此位 set 的字符串表示形式。 |
26 | void xor(BitSet bitSet) | 對此位 set 和位 set 參數執行邏輯異或操做。 |
向量(Vector)類和傳統數組很是類似,可是Vector的大小能根據須要動態的變化。
和數組同樣,Vector對象的元素也能經過索引訪問。
使用Vector類最主要的好處就是在建立對象的時候沒必要給對象指定大小,它的大小會根據須要動態的變化。.net
Java Vector 類設計
Vector類實現了一個動態數組。和ArrayList和類似,可是二者是不一樣的:
Vector主要用在事先不知道數組的大小,或者只是須要一個能夠改變大小的數組的狀況。
Vector類支持4種構造方法。
Vector()
Vector(int size)
Vector(int size,int incr)
Vector(Collection c)
除了從父類繼承的方法外Vector還定義瞭如下方法:
序號 | 方法描述 | |
---|---|---|
1 | void add(int index, Object element) | 在此向量的指定位置插入指定的元素。 |
2 | boolean add(Object o) | 將指定元素添加到此向量的末尾。 |
3 | boolean addAll(Collection c) | 將指定 Collection 中的全部元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的順序添加這些元素。 |
4 | boolean addAll(int index, Collection c) | 在指定位置將指定 Collection 中的全部元素插入到此向量中。 |
5 | void addElement(Object obj) | 將指定的組件添加到此向量的末尾,將其大小增長 1。 |
6 | int capacity() | 返回此向量的當前容量。 |
7 | void clear() | 今後向量中移除全部元素。 |
8 | Object clone() | 返回向量的一個副本。 |
9 | boolean contains(Object elem) | 若是此向量包含指定的元素,則返回 true。 |
10 | boolean containsAll(Collection c) | 若是此向量包含指定 Collection 中的全部元素,則返回 true。 |
11 | void copyInto(Object[] anArray) | 將此向量的組件複製到指定的數組中。 |
12 | Object elementAt(int index) | 返回指定索引處的組件。 |
13 | Enumeration elements() | 返回此向量的組件的枚舉。 |
14 | void ensureCapacity(int minCapacity) | 增長此向量的容量(若有必要),以確保其至少可以保存最小容量參數指定的組件數。 |
15 | boolean equals(Object o) | 比較指定對象與此向量的相等性。 |
16 | Object firstElement() | 返回此向量的第一個組件(位於索引 0) 處的項)。 |
17 | Object get(int index) | 返回向量中指定位置的元素。 |
18 | int hashCode() | 返回此向量的哈希碼值。 |
19 | int indexOf(Object elem) | 返回此向量中第一次出現的指定元素的索引,若是此向量不包含該元素,則返回 -1。 |
20 | int indexOf(Object elem, int index) | 返回此向量中第一次出現的指定元素的索引,從 index 處正向搜索,若是未找到該元素,則返回 -1。 |
21 | void insertElementAt(Object obj, int index) | 將指定對象做爲此向量中的組件插入到指定的 index 處。 |
22 | boolean isEmpty() | 測試此向量是否不包含組件。 |
23 | Object lastElement() | 返回此向量的最後一個組件。 |
24 | int lastIndexOf(Object elem) | 返回此向量中最後一次出現的指定元素的索引;若是此向量不包含該元素,則返回 -1。 |
25 | int lastIndexOf(Object elem, int index) | 返回此向量中最後一次出現的指定元素的索引,從 index 處逆向搜索,若是未找到該元素,則返回 -1。 |
26 | Object remove(int index) | 移除此向量中指定位置的元素。 |
27 | boolean remove(Object o) | 移除此向量中指定元素的第一個匹配項,若是向量不包含該元素,則元素保持不變。 |
28 | boolean removeAll(Collection c) | 今後向量中移除包含在指定 Collection 中的全部元素。 |
29 | void removeAllElements() | 今後向量中移除所有組件,並將其大小設置爲零。 |
30 | boolean removeElement(Object obj) | 今後向量中移除變量的第一個(索引最小的)匹配項。 |
31 | void removeElementAt(int index) | 刪除指定索引處的組件。 |
32 | protected void removeRange(int fromIndex, int toIndex) | 今後 List 中移除其索引位於 fromIndex(包括)與 toIndex(不包括)之間的全部元素。 |
33 | boolean retainAll(Collection c) | 在此向量中僅保留包含在指定 Collection 中的元素。 |
34 | Object set(int index, Object element) | 用指定的元素替換此向量中指定位置處的元素。 |
35 | void setElementAt(Object obj, int index) | 將此向量指定 index 處的組件設置爲指定的對象。 |
36 | void setSize(int newSize) | 設置此向量的大小。 |
37 | int size() | 返回此向量中的組件數。 |
38 | List subList(int fromIndex, int toIndex) | 返回此 List 的部分視圖,元素範圍爲從 fromIndex(包括)到 toIndex(不包括)。 |
39 | Object[] toArray() | 返回一個數組,包含此向量中以恰當順序存放的全部元素。 |
40 | Object[] toArray(Object[] a) | 返回一個數組,包含此向量中以恰當順序存放的全部元素;返回數組的運行時類型爲指定數組的類型。 |
41 | String toString() | 返回此向量的字符串表示形式,其中包含每一個元素的 String 表示形式。 |
42 | void trimToSize() | 對此向量的容量進行微調,使其等於向量的當前大小。 |
棧(Stack)實現了一個後進先出(LIFO)的數據結構。
你能夠把棧理解爲對象的垂直分佈的棧,當你添加一個新元素時,就將新元素放在其餘元素的頂部。
當你從棧中取元素的時候,就從棧頂取一個元素。換句話說,最後進棧的元素最早被取出。
棧是Vector的一個子類,它實現了一個標準的後進先出的棧。
堆棧只定義了默認構造函數,用來建立一個空棧。 堆棧除了包括由Vector定義的全部方法,也定義了本身的一些方法。
Stack()
除了由Vector定義的全部方法,本身也定義了一些方法:
序號 | 方法描述 | |
---|---|---|
1 | boolean empty() | 測試堆棧是否爲空。 |
2 | Object peek( ) | 查看堆棧頂部的對象,但不從堆棧中移除它。 |
3 | Object pop( ) | 移除堆棧頂部的對象,並做爲此函數的值返回該對象。 |
4 | Object push(Object element) | 把項壓入堆棧頂部。 |
5 | int search(Object element) | 返回對象在堆棧中的位置,以 1 爲基數。 |
字典(Dictionary) 類是一個抽象類,它定義了鍵映射到值的數據結構。
當你想要經過特定的鍵而不是整數索引來訪問數據的時候,這時候應該使用Dictionary。
因爲Dictionary類是抽象類,因此它只提供了鍵映射到值的數據結構,而沒有提供特定的實現。
Dictionary 類是一個抽象類,用來存儲鍵/值對,做用和Map類類似。
給出鍵和值,你就能夠將值存儲在Dictionary對象中。一旦該值被存儲,就能夠經過它的鍵來獲取它。因此和Map同樣, Dictionary 也能夠做爲一個鍵/值對列表。
Dictionary 定義的抽象方法以下表所示:
序號 | 方法描述 | |
---|---|---|
1 | Enumeration elements( ) | 返回此 dictionary 中值的枚舉。 |
2 | Object get(Object key) | 返回此 dictionary 中該鍵所映射到的值。 |
3 | boolean isEmpty( ) | 測試此 dictionary 是否不存在從鍵到值的映射。 |
4 | Enumeration keys( ) | 返回此 dictionary 中的鍵的枚舉。 |
5 | Object put(Object key, Object value) | 將指定 key 映射到此 dictionary 中指定 value。 |
6 | Object remove(Object key) | 今後 dictionary 中移除 key (及其相應的 value)。 |
7 | int size( ) | 返回此 dictionary 中條目(不一樣鍵)的數量。 |
Dictionary 類已通過時了。在實際開發中,你能夠實現Map接口來獲取鍵/值的存儲功能。
Hashtable類提供了一種在用戶定義鍵結構的基礎上來組織數據的手段。
例如,在地址列表的哈希表中,你能夠根據郵政編碼做爲鍵來存儲和排序數據,而不是經過人名。
哈希表鍵的具體含義徹底取決於哈希表的使用情景和它包含的數據。
Hashtable是原始的java.util的一部分, 是一個Dictionary具體的實現 。
然而,Java 2 重構的Hashtable實現了Map接口,所以,Hashtable如今集成到了集合框架中。它和HashMap類很類似,可是它支持同步。
像HashMap同樣,Hashtable在哈希表中存儲鍵/值對。當使用一個哈希表,要指定用做鍵的對象,以及要連接到該鍵的值。
而後,該鍵通過哈希處理,所獲得的散列碼被用做存儲在該表中值的索引。
Hashtable()
Hashtable(int size)
Hashtable(int size,float fillRatio)
Hashtable(Map m)
Hashtable中除了從Map接口中定義的方法外,還定義瞭如下方法:
序號 | 方法描述 | |
---|---|---|
1 | void clear( ) | 將此哈希表清空,使其不包含任何鍵。 |
2 | Object clone( ) | 建立此哈希表的淺表副本。 |
3 | boolean contains(Object value) | 測試此映射表中是否存在與指定值關聯的鍵。 |
4 | boolean containsKey(Object key) | 測試指定對象是否爲此哈希表中的鍵。 |
5 | boolean containsValue(Object value) | 若是此 Hashtable 將一個或多個鍵映射到此值,則返回 true。 |
6 | Enumeration elements( ) | 返回此哈希表中的值的枚舉。 |
7 | Object get(Object key) | 返回指定鍵所映射到的值,若是此映射不包含此鍵的映射,則返回 null. 更確切地講,若是此映射包含知足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;不然,返回 null。 |
8 | boolean isEmpty( ) | 測試此哈希表是否沒有鍵映射到值。 |
9 | Enumeration keys( ) | 返回此哈希表中的鍵的枚舉。 |
10 | Object put(Object key, Object value) | 將指定 key 映射到此哈希表中的指定 value。 |
11 | void rehash( ) | 增長此哈希表的容量並在內部對其進行重組,以便更有效地容納和訪問其元素。 |
12 | Object remove(Object key) | 從哈希表中移除該鍵及其相應的值。 |
13 | int size( ) | 返回此哈希表中的鍵的數量。 |
14 | String toString( ) | 返回此 Hashtable 對象的字符串表示形式,其形式爲 ASCII 字符 ", " (逗號加空格)分隔開的、括在括號中的一組條目。 |