Java工具包中包含許多強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),主要包括
枚舉(Enumeration);
位集合(BitSet);
向量(Vector);
棧(Stack);
字典(Dictionary);
哈希表(Hashtable);
屬性(Properties);
下面是詳細(xì)的敘述和實(shí)例:
1、枚舉(Enumeration);
? ? 枚舉的定義是從其它數(shù)據(jù)結(jié)構(gòu)中取出連續(xù)元素,而它本身并不是一種數(shù)據(jù)結(jié)構(gòu),現(xiàn)在已經(jīng)基本上被迭代器所取代,但在某些方面仍有使用,如應(yīng)用在Vector和Properties等少數(shù)傳統(tǒng)類中,另外還有一些API類,以及應(yīng)用程序中,下面以枚舉在Vector中的應(yīng)用為例:
import java.util.Enumeration;
import java.util.Vector;
//從Vector中取出連續(xù)元素
public class EnumerationTest {
public EnumerationTest(){
Enumeration days;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明枚舉對象days
Vector daysNames =new Vector<>();? ? ? ? ? ? ? //申明一個(gè)Vector,存放元素? ? ? ? ? ? ? ?
daysNames.add("Java");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //向Vector中存放元素
daysNames.add("數(shù)");
daysNames.add("據(jù)");
daysNames.add("結(jié)");
daysNames.add("構(gòu)");
days = daysNames.elements();
while (days.hasMoreElements()){? ? ? ? ? ? ? ? ? ? //hasMoreElements()方法用于測試此枚舉是否包含更多元素
System.out.println(days.nextElement());? ? ? ? //nextElement()方法測試此枚舉是否存在下一個(gè)元素,若存在返回此枚舉的下一個(gè)元素,否則結(jié)束
}
}
}
測試成功輸出控制臺顯示如下信息:

2、位集合(BitSet);
? ? 位集合類實(shí)現(xiàn)了一組可以單獨(dú)設(shè)置和清除的位或標(biāo)志。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 該類在處理一組布爾值時(shí)比較高效,只需要給每個(gè)值賦值一"位",然后對位進(jìn)行適當(dāng)?shù)脑O(shè)置或清除,就可以對布爾值進(jìn)行操作了。位集合實(shí)際上類似于數(shù)學(xué)中的集合,然后對集合進(jìn)行操作,相關(guān)操作有:? ? ? ? ? ? ? ? ? void set(int index) 設(shè)置index所在的布爾值為true;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void clear(int index)設(shè)置index所在的布爾值為false;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void and(BitSet set)執(zhí)行邏輯與操作? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void or(BitSet bitSet)執(zhí)行邏輯或操作。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void xor(BitSet bitSet)執(zhí)行邏輯異或操作。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 下面是Java代碼實(shí)例
import java.util.BitSet;
//Java數(shù)據(jù)結(jié)構(gòu)-位運(yùn)算
public class BitSetTest {
public BitSetTest(){
BitSet bit1 =new BitSet(10);
BitSet bit2 =new BitSet(10);
for(int i=0;i<10;i++){
if(i%2==0) bit1.set(i);
if(i%3==0) bit2.set(i);
}
System.out.println("bit1中的元素有"+bit1);
System.out.println("bit2中的元素有"+bit2);
bit1.and(bit2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //邏輯與運(yùn)算
System.out.println("bit1和bit2進(jìn)行與運(yùn)算的結(jié)果為"+bit1);
System.out.println("--------------------------------------------------");
System.out.println("bit1中的元素有"+bit1);
System.out.println("bit2中的元素有"+bit2);
bit1.or(bit2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //邏輯或運(yùn)算
System.out.println("bit1和bit2進(jìn)行或運(yùn)算的結(jié)果為"+bit2);
System.out.println("--------------------------------------------------");
System.out.println("bit1中的元素有"+bit1);
System.out.println("bit2中的元素有"+bit2);
bit1.xor(bit2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //邏輯異或運(yùn)算
System.out.println("bit1和bit2進(jìn)行異或運(yùn)算的結(jié)果為"+bit1);
}
}
測試成功輸出控制臺顯示如下信息:

3、向量(Vector);
? ? Vector 類實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)數(shù)組。和 ArrayList 很相似,但是兩者不同,Vector 包含了許多不屬于集合框架的傳統(tǒng)方法,Vector 主要用于不確定數(shù)組的大小,或者說是一個(gè)可以改變大小的數(shù)組的情況。相關(guān)操作有
? ? void addElement(Object obj) 將指定的組件添加到此向量的末尾,將其大小增加 1。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int capacity() 返回此向量的當(dāng)前容量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int size() 返回此向量中的組件數(shù)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object firstElement() 返回此向量的第一個(gè)組件(位于索引 0)處的項(xiàng))。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object lastElement() 返回此向量的最后一個(gè)組件。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? boolean contains(Collection c) 如果此向量包含指定 Collection 中的所有元素,則返回 true。? ? ? ? ? ? ? ? ? ? ? ? 下面是Java代碼實(shí)例
import java.util.Enumeration;
import java.util.Vector;
//Java數(shù)據(jù)結(jié)構(gòu)-向量(Vector)
public class VectorTest {
public VectorTest(){
Vector v =new Vector(2,2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明Vector對象,設(shè)置初始容量為2,增量為2
Enumeration num;//申明枚舉對象num
System.out.println("向量中組件數(shù)量為:"+v.size());? ? ? //返回向量中組件數(shù)量
System.out.println("向量初始容量為:"+v.capacity());? //返回向量容量
System.out.println("-------------------------------------------");
v.addElement(new Integer(1));? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //往向量中增加組件
v.addElement(new Integer(2));
v.addElement(new Double(1.52));? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //添加組件超過初始容量,自動(dòng)增加2
//v.addElement(new String("java"));
System.out.println("增加向量組件后向量的組件數(shù)量為:"+v.size());? ? ? ? //返回增加組件后的向量的組件數(shù)量
System.out.println("增加向量組件后向量的容量為:"+v.capacity());? ? ? ? //返回增加組件后的向量的容量大小
System.out.println("-------------------------------------------");
System.out.println("向量中的第一個(gè)組件為:"+v.firstElement());? ? ? ? ? //返回向量的第一個(gè)組件
System.out.println("向量中的最后一個(gè)組件為:"+v.lastElement());? ? ? ? //返回向量的最后一個(gè)組件
System.out.println("-------------------------------------------");
if(v.contains(new Integer(1)))? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //測試向量中是否含有組件1
System.out.println("向量中包含組件1");
num = v.elements();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //通過枚舉對象取出向量中的組件
while(num.hasMoreElements())
System.out.print(num.nextElement()+"? ? ? ");
}
}
測試成功輸出控制臺顯示如下信息:

4、棧(Stack);
? ? 棧(Stack)實(shí)現(xiàn)了一個(gè)后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu)??梢岳斫鉃榇怪贝鎯?,先進(jìn)的放置在底部,后進(jìn)的放置在上面,取出是自頂向下取出。相關(guān)操作有:
? ? Object push(Object element)把項(xiàng)壓入堆棧頂部。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object pop( )移除堆棧頂部的對象,并作為此函數(shù)的值返回該對象。
? ? 下面是Java代碼實(shí)例
import java.util.Stack;
//Java數(shù)據(jù)結(jié)構(gòu)-棧(Stack)
public class StackTest {
public StackTest(){
Stack st =new Stack<>();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明棧對象st
? ? ? ? for(int i=0;i<3;i++){
st.push(new Integer(i));? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //元素入棧
? ? ? ? ? ? System.out.println("(" + i +")入棧");
}
System.out.println("當(dāng)前棧的元素有: " + st);
System.out.println("取出棧頂元素:"+st.pop() );? ? ? ? ? ? ? //取出棧頂元素
? ? ? ? System.out.println("當(dāng)前棧的元素有: " + st);? ? ? ? ? //查看取出棧頂元素后的棧元素
? ? }
}
測試成功輸出控制臺顯示如下信息:

5、字典(Dictionary);
? ? 字典(Dictionary) 類是一個(gè)抽象類,它定義了鍵映射到值的數(shù)據(jù)結(jié)構(gòu)。字典是通過特定的鍵而不是整數(shù)索引來訪問數(shù)據(jù)。在現(xiàn)代Dictionary類已經(jīng)過時(shí),在實(shí)際開發(fā)中,通過實(shí)現(xiàn)Map接口來獲取鍵/值的存儲功能。
6、哈希表(Hashtable);
? ? Hashtable類提供了一種在用戶定義鍵結(jié)構(gòu)的基礎(chǔ)上來組織數(shù)據(jù)的手段。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數(shù)據(jù)。一個(gè)哈希表,要指定用作鍵的對象,以及要鏈接到該鍵的值,該鍵經(jīng)過哈希處理,所得到的散列碼被用作存儲在該表中值的索引。相關(guān)操作有:
? ? Object put(Object key, Object value)將指定 key 映射到此哈希表中的指定 value。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Enumeration keys( )返回此哈希表中的鍵的枚舉。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object get(Object key)返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回 null. 更確切? ? ? ? ? 地講,如果此映射包含滿足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;否則,返回 null。
? ? 下面是Java代碼實(shí)例
import java.util.Enumeration;
import java.util.Hashtable;
//Java數(shù)據(jù)結(jié)構(gòu)-哈希表(HashTable)
public class HashTableTest {
public HashTableTest() {
Hashtable hash =new Hashtable();? ? ? ? ? ? //申明HashTable對象hashEnumeration num;//申明枚舉對象num
String str;
Double doub;
hash.put("book",new Double(1.11));? ? ? ? ? ? //在哈希表中添加鍵值對
hash.put("paper",new Double(2.22));
num = hash.keys();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //通過枚舉取出哈希表中的鍵
while(num.hasMoreElements()){
str = (String)num.nextElement();
System.out.println("商品名稱:"+str+"? ? 價(jià)格:"+hash.get(str));
}
doub = ((Double)hash.get("book")).doubleValue();
hash.put("book",new Double(doub+100));? ? ? //修改哈希表中相關(guān)鍵的值
? ? ? ? System.out.println("book的新價(jià)格為:"+hash.get("book"));
}
}
測試成功輸出控制臺顯示如下信息:

7、屬性(Properties);
? ? Properties 繼承于 Hashtable.Properties 類表示了一個(gè)持久的屬性集,所以具有HashTable的相關(guān)方法,屬性列表中每個(gè)鍵及其對應(yīng)值都是一個(gè)字符串??捎糜讷@取環(huán)境變量時(shí)它就作為System.getProperties()方法的返回值。相關(guān)操作有:
? ? String getProperty(String key)用指定的鍵? ? ? 在此屬性列表中搜索屬性。? ? ? ? ? ? ? ? ? ? ? ? ? String getProperty(String key, String defaultProperty)用指定的鍵在屬性列表中搜索屬性。
? ? 下面是Java代碼實(shí)例
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest {
public PropertiesTest(){
Properties pro =new Properties();? ? ? ? ? ? ? ? ? ? //申明Properties對象 pro
Set state;
String str;
pro.put("admin","111");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //設(shè)置鍵值對
pro.put("normal","222");
state = pro.keySet();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //將鍵值對添加到HashTable
Iterator itr = state.iterator();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明迭代器對象itr,取出鍵值對
while (itr.hasNext()){? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //判斷是否存在下一組鍵值對
str = (String) itr.next();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //返回下一組鍵值對
System.out.println("賬號為:"+
str +"? ? 密碼為:" + pro.getProperty(str) +".");
}
str = pro.getProperty("leader","不存在");? ? ? ? ? ? //不存在的鍵,其值設(shè)置為“不存在”
System.out.println("賬戶為leader" + str);
}
}
測試成功輸出控制臺顯示如下信息:
