一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)
Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。在Java中的數(shù)據(jù)結(jié)構(gòu)主要包括以下幾種接口和類(lèi):
- 枚舉(Enumeration)
- 位集合(BitSet)
- 向量(Vector)
- 棧(Stack)
- 字典(Dictionary)
- 哈希表(Hashtable)
- 屬性(Properties)
以上這些類(lèi)是傳統(tǒng)遺留的,在Java2中引入了一種新的框架-集合框架(Collection)。
枚舉接口(Enumeration)
枚舉(Enumeration)接口雖然它本身不屬于數(shù)據(jù)結(jié)構(gòu),但它在其他數(shù)據(jù)結(jié)構(gòu)的范疇里應(yīng)用很廣。 枚舉(The Enumeration)接口定義了一種從數(shù)據(jù)結(jié)構(gòu)中取回連續(xù)元素的方式。例如,枚舉定義了一個(gè)叫nextElement 的方法,該方法用來(lái)得到一個(gè)包含多元素的數(shù)據(jù)結(jié)構(gòu)的下一個(gè)元素。
這種傳統(tǒng)接口已被 Iterator (迭代器)取代,雖然Enumeration 還未被遺棄,但在現(xiàn)代代碼中已經(jīng)被很少使用了。盡管如此,它還是使用在諸如Vector(向量)和Properties(屬性)這些傳統(tǒng)類(lèi)所定義的方法中,除此之外,還用在一些API類(lèi),并且在應(yīng)用程序中也廣泛被使用。 下表總結(jié)了一些Enumeration聲明的方法:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | boolean hasMoreElements( ) ,測(cè)試此枚舉是否包含更多的元素 |
| 2 | Object nextElement( ) ,如果此枚舉對(duì)象至少還有一個(gè)可提供的元素,則返回此枚舉的下一個(gè)元素 |
位集合(BitSet)
位集合類(lèi)實(shí)現(xiàn)了一組可以單獨(dú)設(shè)置和清除的位或標(biāo)志。該類(lèi)在處理一組布爾值的時(shí)候非常有用,你只需要給每個(gè)值賦值一"位",然后對(duì)位進(jìn)行適當(dāng)?shù)脑O(shè)置或清除,就可以對(duì)布爾值進(jìn)行操作了。
一個(gè)Bitset類(lèi)創(chuàng)建一種特殊類(lèi)型的數(shù)組來(lái)保存位值。BitSet中數(shù)組大小會(huì)隨需要增加。這和位向量(vector of bits)比較類(lèi)似。這是一個(gè)傳統(tǒng)的類(lèi),但它在Java 2中被完全重新設(shè)計(jì)。
BitSet定義了兩個(gè)構(gòu)造方法:
// 第一個(gè)構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)的對(duì)象: public BitSet() // 第二個(gè)方法允許用戶(hù)指定初始大小。所有位初始化為0 public BitSet(int nbits)
BitSet中實(shí)現(xiàn)了Cloneable接口中定義的方法如下表所列:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | void and(BitSet set) ,對(duì)此目標(biāo)位 set 和參數(shù)位 set 執(zhí)行邏輯與操作 |
| 2 | void andNot(BitSet set) ,清除此 BitSet 中所有的位,其相應(yīng)的位在指定的 BitSet 中已設(shè)置 |
| 3 | int cardinality( ) ,返回此 BitSet 中設(shè)置為 true 的位數(shù) |
| 4 | void clear( ) ,將此 BitSet 中的所有位設(shè)置為 false |
| 5 | void clear(int index) ,將索引指定處的位設(shè)置為 false |
| 6 | void clear(int startIndex, int endIndex) ,將指定的 startIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 false |
| 7 | Object clone( ) ,復(fù)制此 BitSet,生成一個(gè)與之相等的新 BitSet |
| 8 | boolean equals(Object bitSet) ,將此對(duì)象與指定的對(duì)象進(jìn)行比較 |
| 9 | void flip(int index) ,將指定索引處的位設(shè)置為其當(dāng)前值的補(bǔ)碼 |
| 10 | void flip(int startIndex, int endIndex) ,將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的每個(gè)位設(shè)置為其當(dāng)前值的補(bǔ)碼 |
| 11 | boolean get(int index) ,返回指定索引處的位值 |
| 12 | BitSet get(int startIndex, int endIndex) ,返回一個(gè)新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)范圍內(nèi)的位組成 |
| 13 | int hashCode( ) ,返回此位 set 的哈希碼值 |
| 14 | boolean intersects(BitSet bitSet) ,如果指定的 BitSet 中有設(shè)置為 true 的位,并且在此 BitSet 中也將其設(shè)置為 true,則返回 true |
| 15 | boolean isEmpty( ) ,如果此 BitSet 中沒(méi)有包含任何設(shè)置為 true 的位,則返回 true |
| 16 | int length( ) ,返回此 BitSet 的"邏輯大小":BitSet 中最高設(shè)置位的索引加 1 |
| 17 | int nextClearBit(int startIndex) ,返回第一個(gè)設(shè)置為 false 的位的索引,這發(fā)生在指定的起始索引或之后的索引上 |
| 18 | int nextSetBit(int startIndex),返回第一個(gè)設(shè)置為 true 的位的索引,這發(fā)生在指定的起始索引或之后的索引上 |
| 19 | void or(BitSet bitSet),對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯或操作 |
| 20 | void set(int index),將指定索引處的位設(shè)置為 true |
| 21 | void set(int index, boolean v),將指定索引處的位設(shè)置為指定的值 |
| 22 | void set(int startIndex, int endIndex),將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 true |
| 23 | void set(int startIndex, int endIndex, boolean v),將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為指定的值 |
| 24 | int size( ),返回此 BitSet 表示位值時(shí)實(shí)際使用空間的位數(shù) |
| 25 | String toString( ),返回此位 set 的字符串表示形式 |
| 26 | void xor(BitSet bitSet),對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯異或操作 |
實(shí)例:
public class Test {
public static void main(String args[]) throws IOException {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
// 設(shè)置一些位
for(int i=0; i<16; i++) {
if((i%2) == 0) bits1.set(i);
if((i%5) != 0) bits2.set(i);
}
System.out.println("位集合1初始模式: ");
System.out.println(bits1);
System.out.println("\n位集合2初始模式: ");
System.out.println(bits2);
// 對(duì)此目標(biāo)位 set 和參數(shù)位 set 執(zhí)行邏輯與操作
bits2.and(bits1);
System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯與操作 ");
System.out.println(bits2);
// 對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯或操作
bits2.or(bits1);
System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯或操作: ");
System.out.println(bits2);
// 對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯異或操作
bits2.xor(bits1);
System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯異或操作 ");
System.out.println(bits2);
}
}
// 程序編譯運(yùn)行結(jié)果如下:
// 位集合1初始模式:
// {0, 2, 4, 6, 8, 10, 12, 14}
// 位集合2初始模式:
// {1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯與操作
// {2, 4, 6, 8, 12, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯或操作:
// {0, 2, 4, 6, 8, 10, 12, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯異或操作
// {}向量(Vector)
向量(Vector)類(lèi)和傳統(tǒng)數(shù)組非常相似,但是Vector的大小能根據(jù)需要?jiǎng)討B(tài)的變化。和數(shù)組一樣,Vector對(duì)象的元素也能通過(guò)索引訪(fǎng)問(wèn)。使用Vector類(lèi)最主要的好處就是在創(chuàng)建對(duì)象的時(shí)候不必給對(duì)象指定大小,它的大小會(huì)根據(jù)需要?jiǎng)討B(tài)的變化。
Vector 與 ArrayList的區(qū)別:
- Vector 是同步訪(fǎng)問(wèn)的,所以線(xiàn)程就會(huì)安全,但是同時(shí)也會(huì)帶來(lái)弊端就是效率就會(huì)降低,但 Arraylist 恰恰相反,這也就導(dǎo)致Arraylist的效率比 Vector 高。
- 在進(jìn)行擴(kuò)容時(shí),Vector 會(huì)增長(zhǎng)為原來(lái)數(shù)組長(zhǎng)的一倍,而 Arraylist 只會(huì)增長(zhǎng)為原來(lái)的一半,所以Arraylist節(jié)約內(nèi)存空間。
- Vector 包含了許多傳統(tǒng)的方法,這些方法不屬于集合框架。
Vector 類(lèi)支持 4 種構(gòu)造方法:
// 第一種構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)的向量,默認(rèn)大小為 10 Vector() // 第二種構(gòu)造方法創(chuàng)建指定大小的向量 Vector(int size) // 第三種構(gòu)造方法創(chuàng)建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素?cái)?shù)目 Vector(int size,int incr) // 第四種構(gòu)造方法創(chuàng)建一個(gè)包含集合 c 元素的向量 Vector(Collection c)
除了從父類(lèi)繼承的方法外 Vector 還定義了以下方法:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | void add(int index, Object element) ,在此向量的指定位置插入指定的元素 |
| 2 | boolean add(Object o) ,將指定元素添加到此向量的末尾 |
| 3 | boolean addAll(Collection c) ,將指定 Collection 中的所有元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的順序添加這些元素 |
| 4 | boolean addAll(int index, Collection c) ,在指定位置將指定 Collection 中的所有元素插入到此向量中 |
| 5 | void addElement(Object obj) ,將指定的組件添加到此向量的末尾,將其大小增加 1 |
| 6 | int capacity() ,返回此向量的當(dāng)前容量 |
| 7 | void clear() ,從此向量中移除所有元素 |
| 8 | Object clone() ,返回向量的一個(gè)副本 |
| 9 | boolean contains(Object elem) ,如果此向量包含指定的元素,則返回 true |
| 10 | boolean containsAll(Collection c) ,如果此向量包含指定 Collection 中的所有元素,則返回 true |
| 11 | void copyInto(Object[] anArray) ,將此向量的組件復(fù)制到指定的數(shù)組中 |
| 12 | Object elementAt(int index) ,返回指定索引處的組件 |
| 13 | Enumeration elements() ,返回此向量的組件的枚舉 |
| 14 | void ensureCapacity(int minCapacity) ,增加此向量的容量(如有必要),以確保其至少能夠保存最小容量參數(shù)指定的組件數(shù) |
| 15 | boolean equals(Object o) ,比較指定對(duì)象與此向量的相等性 |
| 16 | Object firstElement() ,返回此向量的第一個(gè)組件(位于索引 0) 處的項(xiàng)) |
| 17 | Object get(int index) ,返回向量中指定位置的元素 |
| 18 | int hashCode() ,返回此向量的哈希碼值 |
| 19 | int indexOf(Object elem) ,返回此向量中第一次出現(xiàn)的指定元素的索引,如果此向量不包含該元素,則返回 -1 |
| 20 | int indexOf(Object elem, int index) ,返回此向量中第一次出現(xiàn)的指定元素的索引,從 index 處正向搜索,如果未找到該元素,則返回 -1 |
| 21 | void insertElementAt(Object obj, int index) ,將指定對(duì)象作為此向量中的組件插入到指定的 index 處 |
| 22 | boolean isEmpty() ,測(cè)試此向量是否不包含組件 |
| 23 | Object lastElement() ,返回此向量的最后一個(gè)組件 |
| 24 | int lastIndexOf(Object elem) ,返回此向量中最后一次出現(xiàn)的指定元素的索引;如果此向量不包含該元素,則返回 -1 |
| 25 | int lastIndexOf(Object elem, int index) ,返回此向量中最后一次出現(xiàn)的指定元素的索引,從 index 處逆向搜索,如果未找到該元素,則返回 -1 |
| 26 | Object remove(int index) ,移除此向量中指定位置的元素 |
| 27 | boolean remove(Object o) ,移除此向量中指定元素的第一個(gè)匹配項(xiàng),如果向量不包含該元素,則元素保持不變 |
| 28 | boolean removeAll(Collection c) ,從此向量中移除包含在指定 Collection 中的所有元素 |
| 29 | void removeAllElements(),從此向量中移除全部組件,并將其大小設(shè)置為零 |
| 30 | boolean removeElement(Object obj) ,從此向量中移除變量的第一個(gè)(索引最小的)匹配項(xiàng) |
| 31 | void removeElementAt(int index) ,刪除指定索引處的組件 |
| 32 | protected void removeRange(int fromIndex, int toIndex) ,從此向量中移除其索引位于 fromIndex(包括)與 toIndex(不包括)之間的所有元素 |
| 33 | boolean retainAll(Collection c) ,在此向量中僅保留包含在指定 Collection 中的元素 |
| 34 | Object set(int index, Object element) ,用指定的元素替換此向量中指定位置處的元素 |
| 35 | void setElementAt(Object obj, int index) ,將此向量指定 index 處的組件設(shè)置為指定的對(duì)象 |
| 36 | void setSize(int newSize) ,設(shè)置此向量的大小 |
| 37 | int size() ,返回此向量中的組件數(shù) |
| 38 | List subList(int fromIndex, int toIndex) ,返回此 List 的部分視圖,元素范圍為從 fromIndex(包括)到 toIndex(不包括) |
| 39 | Object[] toArray() ,返回一個(gè)數(shù)組,包含此向量中以恰當(dāng)順序存放的所有元素 |
| 40 | Object[] toArray(Object[] a) ,返回一個(gè)數(shù)組,包含此向量中以恰當(dāng)順序存放的所有元素;返回?cái)?shù)組的運(yùn)行時(shí)類(lèi)型為指定數(shù)組的類(lèi)型 |
| 41 | String toString() ,返回此向量的字符串表示形式,其中包含每個(gè)元素的 String 表示形式 |
| 42 | void trimToSize() ,對(duì)此向量的容量進(jìn)行微調(diào),使其等于向量的當(dāng)前大小 |
實(shí)例:
public class Test {
public static void main(String args[]) throws IOException {
// 初始大小為3,增量為2
Vector v = new Vector(3, 2);
System.out.println("初始大小: " + v.size());
System.out.println("初始容量: " + v.capacity());
v.addElement(new Integer(1));
v.addElement(new Double(5.45));
v.addElement(new Double(6.08));
v.addElement(new Integer(7));
System.out.println("四次添加后的容量: " + v.capacity());
v.addElement(new Float(9.4));
System.out.println("當(dāng)前容量: " + v.capacity());
v.addElement(new Integer(10));
System.out.println("當(dāng)前容量: " + v.capacity());
System.out.println("第一元素: " + (Integer)v.firstElement());
System.out.println("最后一個(gè)元素: " + (Integer)v.lastElement());
v.addElement(new Integer(3));
// 向量包含3
if(v.contains(new Integer(3))) {
System.out.println("向量包含 3");
}
// 列舉向量中的元素
Enumeration vEnum = v.elements();
System.out.println("\n向量中的元素:");
while(vEnum.hasMoreElements()) {
System.out.print(vEnum.nextElement() + " ");
}
System.out.println();
}
}
// 程序編譯運(yùn)行結(jié)果如下:
// 初始大小: 0
// 初始容量: 3
// 四次添加后的容量: 5
// 當(dāng)前容量: 5
// 當(dāng)前容量: 7
// 第一元素: 1
// 最后一個(gè)元素: 10
// 向量包含 3
// 向量中的元素:
// 1 5.45 6.08 7 9.4 10 3 棧(Stack)
棧(Stack)實(shí)現(xiàn)了一個(gè)后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu)。你可以把棧理解為對(duì)象的垂直分布的棧,當(dāng)你添加一個(gè)新元素時(shí),就將新元素放在其他元素的頂部。當(dāng)你從棧中取元素的時(shí)候,就從棧頂取一個(gè)元素。換句話(huà)說(shuō),最后進(jìn)棧的元素最先被取出。
棧是Vector的一個(gè)子類(lèi),棧只定義了默認(rèn)構(gòu)造函數(shù),用來(lái)創(chuàng)建一個(gè)空棧。棧除了包括由Vector定義的所有方法,也定義了自己的一些方法:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | boolean empty() ,測(cè)試棧是否為空 |
| 2 | Object peek( ) ,查看棧頂部的對(duì)象,但不從棧中移除它 |
| 3 | Object pop( ) ,移除棧頂部的對(duì)象,并作為此函數(shù)的值返回該對(duì)象 |
| 4 | Object push(Object element) ,把項(xiàng)壓入堆棧頂部 |
| 5 | int search(Object element) ,返回對(duì)象在堆棧中的位置,以 1 為基數(shù) |
字典(Dictionary)
字典(Dictionary) 類(lèi)是一個(gè)抽象類(lèi),它定義了鍵映射到值的數(shù)據(jù)結(jié)構(gòu)。當(dāng)你想要通過(guò)特定的鍵而不是整數(shù)索引來(lái)訪(fǎng)問(wèn)數(shù)據(jù)的時(shí)候,這時(shí)候應(yīng)該使用Dictionary。由于Dictionary類(lèi)是抽象類(lèi),所以它只提供了鍵映射到值的數(shù)據(jù)結(jié)構(gòu),而沒(méi)有提供特定的實(shí)現(xiàn)。
Dictionary類(lèi)已經(jīng)過(guò)時(shí)了。在實(shí)際開(kāi)發(fā)中,你可以實(shí)現(xiàn) Map 接口來(lái)獲取鍵/值的存儲(chǔ)功能。
哈希表(Hashtable)
Hashtable類(lèi)提供了一種在用戶(hù)定義鍵結(jié)構(gòu)的基礎(chǔ)上來(lái)組織數(shù)據(jù)的手段。例如,在地址列表的哈希表中,你可以根據(jù)郵政編碼作為鍵來(lái)存儲(chǔ)和排序數(shù)據(jù),而不是通過(guò)人名。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數(shù)據(jù)。
Hashtable是原始的java.util的一部分, 是一個(gè)Dictionary具體的實(shí)現(xiàn) 。然而,Java 2 重構(gòu)的Hashtable實(shí)現(xiàn)了 Map 接口,因此,Hashtable 現(xiàn)在集成到了集合框架中。它和HashMap類(lèi)很相似,但是它支持同步。
像HashMap一樣,Hashtable在哈希表中存儲(chǔ)鍵/值對(duì)。當(dāng)使用一個(gè)哈希表,要指定用作鍵的對(duì)象,以及要鏈接到該鍵的值。然后,該鍵經(jīng)過(guò)哈希處理,所得到的散列碼被用作存儲(chǔ)在該表中值的索引。
Hashtable定義了四個(gè)構(gòu)造方法:
// 默認(rèn)構(gòu)造方法 public Hashtable() // 創(chuàng)建指定大小的哈希表 public Hashtable(int initialCapacity) // 創(chuàng)建了一個(gè)指定大小的哈希表,并且通過(guò)fillRatio指定填充比例 // 填充比例必須介于0.0和1.0之間,它決定了哈希表在重新調(diào)整大小之前的充滿(mǎn)程度 public Hashtable(int initialCapacity, float loadFactor) // 創(chuàng)建了一個(gè)以 t 中元素為初始化元素的哈希表,哈希表的容量被設(shè)置為 t 的兩倍 public Hashtable(Map<? extends K, ? extends V> t)
Hashtable中除了從Map接口中定義的方法外,還定義了以下方法:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | void clear( ) ,將此哈希表清空,使其不包含任何鍵 |
| 2 | Object clone( ) ,創(chuàng)建此哈希表的淺表副本 |
| 3 | boolean contains(Object value) ,測(cè)試此映射表中是否存在與指定值關(guān)聯(lián)的鍵 |
| 4 | boolean containsKey(Object key) ,測(cè)試指定對(duì)象是否為此哈希表中的鍵 |
| 5 | boolean containsValue(Object value) ,如果此 Hashtable 將一個(gè)或多個(gè)鍵映射到此值,則返回 true |
| 6 | Enumeration elements( ) ,返回此哈希表中的值的枚舉 |
| 7 | Object get(Object key) ,返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回 null. 更確切地講,如果此映射包含滿(mǎn)足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;否則,返回 null |
| 8 | boolean isEmpty( ) ,測(cè)試此哈希表是否沒(méi)有鍵映射到值 |
| 9 | Enumeration keys( ) ,返回此哈希表中的鍵的枚舉 |
| 10 | Object put(Object key, Object value) ,將指定 key 映射到此哈希表中的指定 value |
| 11 | void rehash( ) ,增加此哈希表的容量并在內(nèi)部對(duì)其進(jìn)行重組,以便更有效地容納和訪(fǎng)問(wèn)其元素 |
| 12 | Object remove(Object key) ,從哈希表中移除該鍵及其相應(yīng)的值 |
| 13 | int size( ) ,返回此哈希表中的鍵的數(shù)量 |
| 14 | String toString( ) ,返回此 Hashtable 對(duì)象的字符串表示形式,其形式為 ASCII 字符 ", " (逗號(hào)加空格)分隔開(kāi)的、括在括號(hào)中的一組條目 |
屬性(Properties)
Properties 繼承于 Hashtable。Properties 類(lèi)表示了一個(gè)持久的屬性集。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。Properties 類(lèi)被許多Java類(lèi)使用。例如,在獲取環(huán)境變量時(shí)它就作為System.getProperties()方法的返回值。
Properties 定義如下實(shí)例變量.這個(gè)變量持有一個(gè) Properties 對(duì)象相關(guān)的默認(rèn)屬性列表:
protected Properties defaults;
Properties類(lèi)定義了兩個(gè)構(gòu)造方法:
// 第一個(gè)構(gòu)造方法沒(méi)有默認(rèn)值 public Properties() // 第二個(gè)構(gòu)造方法使用propDefault 作為默認(rèn)值 public Properties(Properties defaults)
除了從 Hashtable 中所定義的方法,Properties 還定義了以下方法:
| 序號(hào) | 方法及說(shuō)明 |
|---|---|
| 1 | String getProperty(String key), 用指定的鍵在此屬性列表中搜索屬性 |
| 2 | String getProperty(String key, String defaultProperty),用指定的鍵在屬性列表中搜索屬性 |
| 3 | void list(PrintStream streamOut),將屬性列表輸出到指定的輸出流 |
| 4 | void list(PrintWriter streamOut),將屬性列表輸出到指定的輸出流 |
| 5 | void load(InputStream streamIn) throws IOException,從輸入流中讀取屬性列表(鍵和元素對(duì)) |
| 6 | Enumeration propertyNames( ),按簡(jiǎn)單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對(duì)) |
| 7 | Object setProperty(String key, String value),調(diào)用 Hashtable 的方法 put |
| 8 | void store(OutputStream streamOut, String description),以適合使用 load(InputStream)方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對(duì))寫(xiě)入輸出流 |
以上就是一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于Java數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
RabbitMQ消費(fèi)端ACK NACK及重回隊(duì)列機(jī)制詳解
這篇文章主要為大家介紹了RabbitMQ消費(fèi)端ACK NACK及重回隊(duì)列機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù)的流程分析
這篇文章主要介紹了Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù),主要包括@Async?異步任務(wù)-無(wú)返回值,@Async?異步任務(wù)-有返回值,@Async?+?自定義線(xiàn)程池的操作代碼,需要的朋友可以參考下2022-12-12
java selenium XPath 定位實(shí)現(xiàn)方法
本文主要介紹java selenium XPath,這里整理了XPath的資料,并附實(shí)現(xiàn)方法,有需要的小伙伴可以參考下2016-08-08
淺析Java中StringBuffer和StringBuilder的使用
當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder 類(lèi)。本文就來(lái)和大家簡(jiǎn)單聊聊這二者的使用與區(qū)別吧,希望對(duì)大家有所幫助2023-04-04
java自定義任務(wù)類(lèi)定時(shí)執(zhí)行任務(wù)示例 callable和future接口使用方法
Callable是類(lèi)似于Runnable的接口,實(shí)現(xiàn)Callable接口的類(lèi)和實(shí)現(xiàn)Runnable的類(lèi)都是可被其它線(xiàn)程執(zhí)行的任務(wù)2014-01-01
MybatisPlus多條件?or()的使用問(wèn)題小結(jié)
這篇文章主要介紹了MybatisPlus多條件?or()的使用問(wèn)題小結(jié),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05

