1. 程式人生 > >20180824-Java Enumeration 介面

20180824-Java Enumeration 介面

 

Java Enumeration介面

Enumeration介面中定義了一些方法,通過這些方法可以列舉(一次獲得一個)物件集合中的元素。

這種傳統介面已被迭代器取代,雖然Enumeration 還未被遺棄,但在現代程式碼中已經被很少使用了。

儘管如此,它還是使用在諸如Vector和Properties這些傳統類所定義的方法中,除此之外,還用在一些API類,並且在應用程式中也廣泛被使用。

下表總結了一些Enumeration宣告的方法:

方法描述

boolean hasMoreElements( ) 測試此列舉是否包含更多的元素。

Object nextElement( ) 如果此列舉物件至少還有一個可提供的元素,則返回此列舉的下一個元素。


例項

以下例項演示了Enumeration的使用:


import java.util.Vector;

import java.util.Enumeration;

public class EnumerationTester{
public static void main(String args[]){
Enumeration days;
Vector dayNames = new Vector();

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.nextElements);
}

}
}

 

以上例項編譯執行結果如下:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday


--------------------------------------------------------------------------------------------------------------------


Java Bitset類


個Bitset類建立一種特殊型別的陣列來儲存位值。BitSet中陣列大小會隨需要增加。這和位向量(vector of bits)比較類似。

這是一個傳統的類,但它在Java 2中被完全重新設計。


BitSet定義了兩個構造方法。

第一個構造方法建立一個預設的物件:

BitSet()

第二個方法允許使用者指定初始大小。所有位初始化為0。

BitSet(int size)

BitSet中實現了Cloneable介面中定義的方法如下表所列:

方法描述

void and(BitSet bitSet)
對此目標位 set 和引數位 set 執行邏輯與操作。

void andNot(BitSet bitSet)
清除此 BitSet 中所有的位,其相應的位在指定的 BitSet 中已設定。

int cardinality( )
返回此 BitSet 中設定為 true 的位數。

void clear( )
將此 BitSet 中的所有位設定為 false。

void clear(int index)
將索引指定處的位設定為 false。

void clear(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為 false。

Object clone( )
複製此 BitSet,生成一個與之相等的新 BitSet。

boolean equals(Object bitSet)
將此物件與指定的物件進行比較。

void flip(int index)
將指定索引處的位設定為其當前值的補碼。

void flip(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的每個位設定為其當前值的補碼。

boolean get(int index)
返回指定索引處的位值。

BitSet get(int startIndex, int endIndex)
返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。

int hashCode( )
返回此位 set 的雜湊碼值。

boolean intersects(BitSet bitSet)
如果指定的 BitSet 中有設定為 true 的位,並且在此 BitSet 中也將其設定為 true,則返回 ture。

boolean isEmpty( )
如果此 BitSet 中沒有包含任何設定為 true 的位,則返回 ture。

int length( )
返回此 BitSet 的"邏輯大小":BitSet 中最高設定位的索引加 1。

int nextClearBit(int startIndex)
返回第一個設定為 false 的位的索引,這發生在指定的起始索引或之後的索引上。

int nextSetBit(int startIndex)
返回第一個設定為 true 的位的索引,這發生在指定的起始索引或之後的索引上。

void or(BitSet bitSet)
對此位 set 和位 set 引數執行邏輯或操作。

void set(int index)
將指定索引處的位設定為 true。


void set(int index, boolean v)
將指定索引處的位設定為指定的值。


void set(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為 true。

void set(int startIndex, int endIndex, boolean v)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為指定的值。

int size( )
返回此 BitSet 表示位值時實際使用空間的位數。

String toString( )
返回此位 set 的字串表示形式。

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 bit

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:
{}


----------------------------------------------------------------------------------------------------------------------------

Java Vector 類


Vector類實現了一個動態陣列。和ArrayList和相似,但是兩者是不同的:

Vector是同步訪問的。

Vector包含了許多傳統的方法,這些方法不屬於集合框架。

Vector主要用在事先不知道陣列的大小,或者只是需要一個可以改變大小的陣列的情況。

Vector類支援4種構造方法。


第一種構造方法建立一個預設的向量,預設大小為10:

Vector()

第二種構造方法建立指定大小的向量。

Vector(int size)

第三種構造方法建立指定大小的向量,並且增量用incr指定. 增量表示向量每次增加的元素數目。

Vector(int size,int incr)

第四種構造方法建立一個包含集合c元素的向量:

Vector(Collection c)


除了從父類繼承的方法外Vector還定義了部分方法: 略


-------------------------------------------------------------------------------------------------------------------------

Java Stack 類

 

棧是Vector的一個子類,它實現了一個標準的後進先出的棧。

堆疊只定義了預設建構函式,用來建立一個空棧。 堆疊除了包括由Vector定義的所有方法,也定義了自己的一些方法。

Stack()


除了由Vector定義的所有方法,自己也定義了一些方法:


boolean empty()
測試堆疊是否為空。


Object peek( )
檢視堆疊頂部的物件,但不從堆疊中移除它。


Object pop( )
移除堆疊頂部的物件,並作為此函式的值返回該物件。

 

Object push(Object element)
把項壓入堆疊頂部。


int search(Object element)
返回物件在堆疊中的位置,以 1 為基數。


-------------------------------------------------------------------------------------------------------------------

Java Dictionary 類


Dictionary 類是一個抽象類,用來儲存鍵/值對,作用和Map類相似。

給出鍵和值,你就可以將值儲存在Dictionary物件中。一旦該值被儲存,就可以通過它的鍵來獲取它。所以和Map一樣, Dictionary 也可以作為一個鍵/值對列表。


Dictionary類已經過時了。在實際開發中,你可以實現Map介面來獲取鍵/值的儲存功能。


--------------------------------------------------------------------------------------------------------------------------


Java Map 介面


Map介面中鍵和值一一對映. 可以通過鍵來獲取值。

給定一個鍵和一個值,你可以將該值儲存在一個Map物件. 之後,你可以通過鍵來訪問對應的值。

當訪問的值不存在的時候,方法就會丟擲一個NoSuchElementException異常.

當物件的型別和Map裡元素型別不相容的時候,就會丟擲一個 ClassCastException異常。

當在不允許使用Null物件的Map中使用Null物件,會丟擲一個NullPointerException 異常。

當嘗試修改一個只讀的Map時,會丟擲一個UnsupportedOperationException異常。

 


下面的例子來解釋Map的功能


import java.util.*;

public class CollectionsDemo{
public static void main(String[] args){
Map m1 = new HashMap();
m1.put("Zara", "8");
m1.put("Mahnaz", "31");
m1.put("Ayan", "12");
m1.put("Daisy", "14");
System.out.println();
System.out.println(" Map Elements");
System.out.print("\t" + m1);

}
}


以上例項編譯執行結果如下:

Map Elements
{Mahnaz=31, Ayan=12, Daisy=14, Zara=8}


------------------------------------------------------------------------------------------------------------------------

Java Hashtable 介面


Hashtable是原始的java.util的一部分, 是一個Dictionary具體的實現 。

然而,Java 2 重構的Hashtable實現了Map介面,因此,Hashtable現在整合到了集合框架中。它和HashMap類很相似,但是它支援同步。

像HashMap一樣,Hashtable在雜湊表中儲存鍵/值對。當使用一個雜湊表,要指定用作鍵的物件,以及要連結到該鍵的值。

然後,該鍵經過雜湊處理,所得到的雜湊碼被用作儲存在該表中值的索引。

Hashtable定義了四個構造方法。第一個是預設構造方法:

Hashtable()

第二個建構函式建立指定大小的雜湊表:

Hashtable(int size)

第三個構造方法建立了一個指定大小的雜湊表,並且通過fillRatio指定填充比例。

填充比例必須介於0.0和1.0之間,它決定了雜湊表在重新調整大小之前的充滿程度:

Hashtable(int size,float fillRatio)

第四個構造方法建立了一個以M中元素為初始化元素的雜湊表。

雜湊表的容量被設定為M的兩倍。

Hashtable(Map m)

Hashtable中除了從Map介面中定義的方法外,還定義了以下方法:

 

 


-------------------------------------------------------------------------------------------------------------------------

Java Properties 介面

Properties 繼承於 Hashtable.表示一個持久的屬性集.屬性列表中每個鍵及其對應值都是一個字串。

Properties 類被許多Java類使用。例如,在獲取環境變數時它就作為System.getProperties()方法的返回值。

Properties 定義如下例項變數.這個變數持有一個Properties物件相關的預設屬性列表。

Properties defaults;

Properties類定義了兩個構造方法. 第一個構造方法沒有預設值。

Properties()

第二個構造方法使用propDefault 作為預設值。兩種情況下,屬性列表都為空:

Properties(Properties propDefault)