Java工具包提供了強大的資料結構。在Java中的資料結構主要包括以下幾種介面和類:
枚舉(Enumeration) 位集合(BitSet) 向量(Vector) 棧(Stack) 字典(Dictionary) 雜湊表(Hashtable) 屬性(Properties)
以上這些類是傳統遺留的,在Java2中引入了一種新的架構-集合架構(Collection),我們後面的文章中會有記錄。然而這篇文章我們主要看枚舉(Enumeration)&位集合(BitSet)這兩種資料結構。首先是枚舉(Enumeration)。
枚舉(Enumeration)介面雖然它本身不屬於資料結構,但它在其他資料結構的範疇裡應用很廣。 枚舉(The Enumeration)介面定義了一種從資料結構中取回連續元素的方式。例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的資料結構的下一個元素。
Enumeration介面中定義了一些方法,通過這些方法可以枚舉(一次獲得一個)對象集合中的元素。這種傳統介面已被迭代器取代,雖然Enumeration 還未被遺棄,但在現代代碼中已經被很少使用了。儘管如此,它還是使用在諸如Vector和Properties這些傳統類所定義的方法中,除此之外,還用在一些API類,並且在應用程式中也廣泛被使用。下表總結了一些Enumeration聲明的方法:
| 序號 |
方法描述 |
| 1 |
boolean hasMoreElements( ) 測試此枚舉是否包含更多的元素。 |
| 2 |
Object nextElement( ) 如果此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素。 |
以下執行個體示範了Enumeration的使用:
import java.util.Vector;
import java.util.Enumeration;
public class EnumerationTester {
public static void main(String args[]) {
Enumeration<String> days;
Vector<String> dayNames = new Vector<String>();
dayNames.add("Sunday");
dayNames.add("Monday");
dayNames.add("Tuesday");
dayNames.add("Wednesday");
dayNames.add("Thursday");
dayNames.add("Friday");
dayNames.add("Saturday");
days = dayNames.elements();
while (days.hasMoreElements()){
System.out.println(days.nextElement());
}
}
}
運行結果為:
SundayMondayTuesdayWednesdayThursdayFridaySaturday
然後就來看下位集合(BitSet)。位集合類實現了一組可以單獨設定和清除的位或標誌。該類在處理一組布爾值的時候非常有用,你只需要給每個值賦值一"位",然後對位進行適當的設定或清除,就可以對布爾值進行操作了。
一個Bitset類建立一種特殊類型的數組來儲存位值。BitSet中數組大小會隨需要增加。這和位向量(vector of bits)比較類似。這是一個傳統的類,但它在Java 2中被完全重新設計。BitSet定義了兩個構造方法,第一個構造方法建立一個預設的對象:
BitSet()
第二個方法允許使用者指定初始大小。所有位初始化為0:
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,則返回 ture。 |
| 15 |
boolean isEmpty( ) 如果此 BitSet 中沒有包含任何設定為 true 的位,則返回 ture。 |
| 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 參數執行邏輯異或操作。 |
下面的程式說明這個資料結構支援的幾個方法:
import java.util.BitSet;
public class BitSetDemo {
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
// set some bits
for(int i=0; i<16; i++) {
if((i%2) == 0) bits1.set(i);
if((i%5) != 0) bits2.set(i);
}
System.out.println("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.println("\nInitial pattern in bits2: ");
System.out.println(bits2);
// AND bits
bits2.and(bits1);
System.out.println("\nbits2 AND bits1: ");
System.out.println(bits2);
// OR bits
bits2.or(bits1);
System.out.println("\nbits2 OR bits1: ");
System.out.println(bits2);
// XOR bits
bits2.xor(bits1);
System.out.println("\nbits2 XOR bits1: ");
System.out.println(bits2);
}
}
運行結果為:
Initial pattern in bits1:{0, 2, 4, 6, 8, 10, 12, 14}Initial pattern in bits2:{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}bits2 AND bits1:{2, 4, 6, 8, 12, 14}bits2 OR bits1:{0, 2, 4, 6, 8, 10, 12, 14}bits2 XOR bits1:{} 好啦,這次就到這裡了,後續的資料結構會在之後的文章中記錄。如果感覺不錯的話,請多多點贊支援哦。。。