枚舉(Enumeration)介面雖然它本身不屬於資料結構,但它在其他資料結構的範疇裡應用很廣。枚舉(The Enumeration)介面定義了一種從資料結構中取回連續元素的方式。例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的資料結構的下一個元素。
這種傳統介面已被 Iterator (迭代器)取代,雖然Enumeration 還未被遺棄,但在現代程式碼中已經被很少使用了。儘管如此,它還是使用在諸如Vector(向量)和Properties(屬性)這些傳統類別所定義的方法中,除此之外,還用在一些API類,並且在應用程式中也廣泛被使用。下表總結了一些Enumeration宣告的方法:
序號 | 方法及說明 |
---|---|
位元集合類別實作了一組可以單獨設定和清除的位元或標誌。這個類別在處理一組布林值的時候非常有用,你只需要給每個值賦值一"位",然後對位元進行適當的設定或清除,就可以對布林值進行操作了。
一個Bitset類別建立一個特殊類型的陣列來保存位元值。 BitSet中數組大小會隨需要增加。這和位元向量(vector of bits)比較類似。這是一個傳統的類,但它在Java 2中被完全重新設計。
BitSet定義了兩個建構方法:
// 第一个构造方法创建一个默认的对象: public BitSet() // 第二个方法允许用户指定初始大小。所有位初始化为0 public BitSet(int nbits)
BitSet中實作了Cloneable介面中定義的方法如下表所列:
#序號 | 方法及說明 |
---|---|
1 | void and(BitSet set) ,對此目標位元set 和參數位set 執行邏輯與操作 |
2 | void andNot(BitSet set) ,清除此BitSet 中所有的位,其對應的位在指定的BitSet 中已設定 |
3 | int cardinality( ) ,傳回此BitSet 中設定為true 的位數 |
void clear( ) ,將此BitSet 中的所有位元設為false | |
void clear(int index) ,將索引指定處的位元設定為false | |
void clear(int startIndex, int endIndex) ,將指定的startIndex(包括)到指定的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,則傳回true | |
boolean isEmpty( ) ,如果此BitSet 中沒有包含任何設定為true 的位,則傳回true | |
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 參數執行邏輯異或運算 |
序號 | 方法及說明 |
---|---|
#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 |
int capacity() ,傳回此向量的目前容量 | |
void clear() ,從此向量移除所有元素 | |
Object clone() ,傳迴向量的副本 | |
boolean contains(Object elem) ,如果此向量包含指定的元素,則傳回true | |
boolean containsAll(Collection c) ,如果此向量包含指定Collection 中的所有元素,則傳回true | |
void copyInto(Object[] anArray) ,將此向量的元件複製到指定的陣列中 | |
Object elementAt(int index) ,傳回指定索引處的元件 | |
Enumeration elements() ,傳回此向量的元件的枚舉 | |
void ensureCapacity(int minCapacity) ,增加此向量的容量(如有必要),以確保其至少能夠保存最小容量參數指定的元件數 | |
boolean equals(Object o) ,比較指定物件與此向量的相等性 | |
Object firstElement() ,傳回此向量的第一個元件(位於索引0) 處的項目) | |
# Object get(int index) ,傳迴向量中指定位置的元素 | |
int hashCode() ,傳回此向量的雜湊碼值 | |
int indexOf(Object elem) ,傳回此向量中第一次出現的指定元素的索引,如果此向量不包含該元素,則傳回-1 | |
int indexOf(Object elem, int index) ,傳回此向量中第一次出現的指定元素的索引,從index 處正向搜索,如果未找到該元素,則傳回-1 | |
void insertElementAt(Object obj, int index) ,將指定物件作為此向量中的元件插入指定的index 處 | |
boolean isEmpty() ,測試此向量是否不包含元件 | |
Object lastElement() ,傳回此向量的最後一個元件 | |
int lastIndexOf(Object elem) ,傳回此向量中最後一次出現的指定元素的索引;如果此向量不包含該元素,則傳回-1 | |
int lastIndexOf(Object elem, int index) ,傳回此向量中最後一次出現的指定元素的索引,從index 處逆向搜索,如果找不到該元素,則傳回-1 | |
Object remove(int index) ,移除此向量中指定位置的元素 | |
boolean remove(Object o) ,移除此向量中指定元素的第一個符合項,如果向量不包含該元素,則元素保持不變 | |
boolean removeAll(Collection c) ,從此向量移除包含在指定Collection 中的所有元素 | |
void removeAllElements(),從此向量移除全部元件,並將其大小設為零 | |
boolean removeElement(Object obj) ,從此向量移除變數的第一個(索引最小的)符合項目 | |
# void removeElementAt(int index) ,刪除指定索引處的元件 | |
protected void removeRange(int fromIndex, int toIndex) ,從此向量移除其索引位於fromIndex(包括)與toIndex(不包括)之間的所有元素 | |
boolean retainAll(Collection c) ,在此向量中僅保留包含在指定Collection 中的元素 | |
Object set(int index, Object element) ,以指定的元素取代此向量中指定位置處的元素 | |
void setElementAt(Object obj, int index) ,將此向量指定index 處的元件設定為指定的物件 | |
void setSize(int newSize) ,設定此向量的大小 | |
int size() ,傳回此向量中的群組件數 | |
List subList(int fromIndex, int toIndex) ,傳回此List 的部分視圖,元素範圍為從fromIndex(包含)到toIndex(不包含) | |
Object[] toArray() ,傳回一個數組,包含此向量中以恰當順序存放的所有元素 | |
40 | Object[] toArray(Object[] a) ,返回一个数组,包含此向量中以恰当顺序存放的所有元素;返回数组的运行时类型为指定数组的类型 |
41 | String toString() ,返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式 |
42 | void trimToSize() ,对此向量的容量进行微调,使其等于向量的当前大小 |
实例:
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("当前容量: " + v.capacity()); v.addElement(new Integer(10)); System.out.println("当前容量: " + v.capacity()); System.out.println("第一元素: " + (Integer)v.firstElement()); System.out.println("最后一个元素: " + (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(); } } // 程序编译运行结果如下: // 初始大小: 0 // 初始容量: 3 // 四次添加后的容量: 5 // 当前容量: 5 // 当前容量: 7 // 第一元素: 1 // 最后一个元素: 10 // 向量包含 3 // 向量中的元素: // 1 5.45 6.08 7 9.4 10 3
栈(Stack)实现了一个后进先出(LIFO)的数据结构。你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。
栈是Vector的一个子类,栈只定义了默认构造函数,用来创建一个空栈。栈除了包括由Vector定义的所有方法,也定义了自己的一些方法:
序号 | 方法及说明 |
---|---|
1 | boolean empty() ,测试栈是否为空 |
2 | Object peek( ) ,查看栈顶部的对象,但不从栈中移除它 |
3 | Object pop( ) ,移除栈顶部的对象,并作为此函数的值返回该对象 |
4 | Object push(Object element) ,把项压入堆栈顶部 |
5 | int search(Object element) ,返回对象在堆栈中的位置,以 1 为基数 |
字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
Dictionary类已经过时了。在实际开发中,你可以实现 Map 接口来获取键/值的存储功能。
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。然而,Java 2 重构的Hashtable实现了 Map 接口,因此,Hashtable 现在集成到了集合框架中。它和HashMap类很相似,但是它支持同步。
像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
Hashtable定义了四个构造方法:
// 默认构造方法 public Hashtable() // 创建指定大小的哈希表 public Hashtable(int initialCapacity) // 创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例 // 填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度 public Hashtable(int initialCapacity, float loadFactor) // 创建了一个以 t 中元素为初始化元素的哈希表,哈希表的容量被设置为 t 的两倍 public Hashtable(Map<? extends K, ? extends V> t)
Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:
序号 | 方法及说明 |
---|---|
1 | void clear( ) ,将此哈希表清空,使其不包含任何键 |
2 | Object clone( ) ,创建此哈希表的浅表副本 |
3 | boolean contains(Object value) ,测试此映射表中是否存在与指定值关联的键 |
4 | boolean containsKey(Object key) ,测试指定对象是否为此哈希表中的键 |
5 | boolean containsValue(Object value) ,如果此 Hashtable 将一个或多个键映射到此值,则返回 true |
6 | Enumeration elements( ) ,返回此哈希表中的值的枚举 |
7 | Object get(Object key) ,返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null |
8 | boolean isEmpty( ) ,测试此哈希表是否没有键映射到值 |
9 | Enumeration keys( ) ,返回此哈希表中的键的枚举 |
10 | Object put(Object key, Object value) ,将指定 key 映射到此哈希表中的指定 value |
11 | void rehash( ) ,增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素 |
12 | Object remove(Object key) ,从哈希表中移除该键及其相应的值 |
13 | int size( ) ,返回此哈希表中的键的数量 |
14 | String toString( ) ,返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目 |
Properties 继承于 Hashtable。Properties 类表示了一个持久的属性集。属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。
Properties 定义如下实例变量.这个变量持有一个 Properties 对象相关的默认属性列表:
protected Properties defaults;
Properties类定义了两个构造方法:
// 第一个构造方法没有默认值 public Properties() // 第二个构造方法使用propDefault 作为默认值 public Properties(Properties defaults)
除了从 Hashtable 中所定义的方法,Properties 还定义了以下方法:
序号 | 方法及说明 |
---|---|
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,从输入流中读取属性列表(键和元素对) |
6 | Enumeration propertyNames( ),按简单的面向行的格式从输入字符流中读取属性列表(键和元素对) |
7 | Object setProperty(String key, String value),调用 Hashtable 的方法 put |
8 | void store(OutputStream streamOut, String description),以适合使用 load(InputStream)方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流 |
以上是分析Java資料結構實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!