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;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明枚舉對(duì)象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()方法用于測(cè)試此枚舉是否包含更多元素
System.out.println(days.nextElement());? ? ? ? //nextElement()方法測(cè)試此枚舉是否存在下一個(gè)元素扣甲,若存在返回此枚舉的下一個(gè)元素,否則結(jié)束
}
}
}
測(cè)試成功輸出控制臺(tái)顯示如下信息:
2而柑、位集合(BitSet)文捶;
? ? 位集合類實(shí)現(xiàn)了一組可以單獨(dú)設(shè)置和清除的位或標(biāo)志荷逞。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 該類在處理一組布爾值時(shí)比較高效媒咳,只需要給每個(gè)值賦值一"位",然后對(duì)位進(jìn)行適當(dāng)?shù)脑O(shè)置或清除种远,就可以對(duì)布爾值進(jìn)行操作了涩澡。位集合實(shí)際上類似于數(shù)學(xué)中的集合,然后對(duì)集合進(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);
}
}
測(cè)試成功輸出控制臺(tái)顯示如下信息:
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對(duì)象,設(shè)置初始容量為2忙灼,增量為2
Enumeration num;//申明枚舉對(duì)象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)))? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //測(cè)試向量中是否含有組件1
System.out.println("向量中包含組件1");
num = v.elements();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //通過枚舉對(duì)象取出向量中的組件
while(num.hasMoreElements())
System.out.print(num.nextElement()+"? ? ? ");
}
}
測(cè)試成功輸出控制臺(tái)顯示如下信息:
4、棧(Stack)该园;
? ? 棧(Stack)實(shí)現(xiàn)了一個(gè)后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu)酸舍。可以理解為垂直存儲(chǔ)里初,先進(jìn)的放置在底部啃勉,后進(jìn)的放置在上面,取出是自頂向下取出双妨。相關(guān)操作有:
? ? Object push(Object element)把項(xiàng)壓入堆棧頂部淮阐。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object pop( )移除堆棧頂部的對(duì)象,并作為此函數(shù)的值返回該對(duì)象刁品。
? ? 下面是Java代碼實(shí)例
import java.util.Stack;
//Java數(shù)據(jù)結(jié)構(gòu)-棧(Stack)
public class StackTest {
public StackTest(){
Stack st =new Stack<>();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明棧對(duì)象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);? ? ? ? ? //查看取出棧頂元素后的棧元素
? ? }
}
測(cè)試成功輸出控制臺(tái)顯示如下信息:
5泣特、字典(Dictionary);
? ? 字典(Dictionary) 類是一個(gè)抽象類挑随,它定義了鍵映射到值的數(shù)據(jù)結(jié)構(gòu)状您。字典是通過特定的鍵而不是整數(shù)索引來訪問數(shù)據(jù)。在現(xiàn)代Dictionary類已經(jīng)過時(shí),在實(shí)際開發(fā)中膏孟,通過實(shí)現(xiàn)Map接口來獲取鍵/值的存儲(chǔ)功能眯分。
6、哈希表(Hashtable)柒桑;
? ? Hashtable類提供了一種在用戶定義鍵結(jié)構(gòu)的基礎(chǔ)上來組織數(shù)據(jù)的手段弊决。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數(shù)據(jù)。一個(gè)哈希表魁淳,要指定用作鍵的對(duì)象丢氢,以及要鏈接到該鍵的值,該鍵經(jīng)過哈希處理先改,所得到的散列碼被用作存儲(chǔ)在該表中值的索引疚察。相關(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對(duì)象hashEnumeration num;//申明枚舉對(duì)象num
String str;
Double doub;
hash.put("book",new Double(1.11));? ? ? ? ? ? //在哈希表中添加鍵值對(duì)
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"));
}
}
測(cè)試成功輸出控制臺(tái)顯示如下信息:
7、屬性(Properties)氯庆;
? ? Properties 繼承于 Hashtable.Properties 類表示了一個(gè)持久的屬性集蹭秋,所以具有HashTable的相關(guān)方法,屬性列表中每個(gè)鍵及其對(duì)應(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對(duì)象 pro
Set state;
String str;
pro.put("admin","111");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //設(shè)置鍵值對(duì)
pro.put("normal","222");
state = pro.keySet();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //將鍵值對(duì)添加到HashTable
Iterator itr = state.iterator();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //申明迭代器對(duì)象itr,取出鍵值對(duì)
while (itr.hasNext()){? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //判斷是否存在下一組鍵值對(duì)
str = (String) itr.next();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //返回下一組鍵值對(duì)
System.out.println("賬號(hào)為:"+
str +"? ? 密碼為:" + pro.getProperty(str) +".");
}
str = pro.getProperty("leader","不存在");? ? ? ? ? ? //不存在的鍵荒给,其值設(shè)置為“不存在”
System.out.println("賬戶為leader" + str);
}
}
測(cè)試成功輸出控制臺(tái)顯示如下信息: