Java數(shù)據(jù)結(jié)構(gòu)

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)顯示如下信息:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丈挟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子志电,更是在濱河造成了極大的恐慌曙咽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溪北,死亡現(xiàn)場(chǎng)離奇詭異桐绒,居然都是意外死亡夺脾,警方通過查閱死者的電腦和手機(jī)之拨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門茉继,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚀乔,你說我怎么就攤上這事烁竭。” “怎么了吉挣?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵派撕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我睬魂,道長(zhǎng)终吼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任氯哮,我火速辦了婚禮际跪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喉钢。我一直安慰自己姆打,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布肠虽。 她就那樣靜靜地躺著幔戏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪税课。 梳的紋絲不亂的頭發(fā)上闲延,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音韩玩,去河邊找鬼慨代。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啸如,可吹牛的內(nèi)容都是我干的侍匙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叮雳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼想暗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帘不,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤说莫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后寞焙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體储狭,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡互婿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辽狈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慈参。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刮萌,靈堂內(nèi)的尸體忽然破棺而出驮配,到底是詐尸還是另有隱情,我是刑警寧澤着茸,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布壮锻,位于F島的核電站,受9級(jí)特大地震影響涮阔,放射性物質(zhì)發(fā)生泄漏猜绣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一敬特、第九天 我趴在偏房一處隱蔽的房頂上張望掰邢。 院中可真熱鬧,春花似錦擅羞、人聲如沸尸变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽召烂。三九已至,卻和暖如春娃承,著一層夾襖步出監(jiān)牢的瞬間奏夫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工历筝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酗昼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓梳猪,卻偏偏與公主長(zhǎng)得像麻削,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子春弥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 慕課視頻(java入門資料):https://www.imooc.com/learn/110呛哟、菜鳥教程 一. ja...
    亮濤閱讀 1,579評(píng)論 0 0
  • Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。在Java中的數(shù)據(jù)結(jié)構(gòu)主要包括以下幾種接口和類: 枚舉(Enumeration...
    863cda997e42閱讀 212評(píng)論 0 1
  • ava工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)匿沛。在Java中的數(shù)據(jù)結(jié)構(gòu)主要包括以下幾種接口和類: 枚舉(Enumeration)...
    java大濕兄閱讀 487評(píng)論 0 1
  • Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)扫责。在Java中的數(shù)據(jù)結(jié)構(gòu)主要包括以下幾種接口和類: 以上這些類是傳統(tǒng)遺留的,在J...
    TESTME閱讀 493評(píng)論 0 0
  • 遲日江山麗逃呼, 春風(fēng)花草香鳖孤。 泥融飛燕子者娱, 沙暖睡鴛鴦。 ——杜甫《絕句二首》 泡桐 泡桐苏揣,玄參目玄參科屬植物黄鳍。是泡...
    園崎茉莉也閱讀 1,597評(píng)論 0 1