枚舉介面(Enumeration)
枚舉(Enumeration)介面雖然它本身不屬於資料結構,但它在其他資料結構的範疇裡應用很廣。枚舉(The Enumeration)介面定義了一種從資料結構中取回連續元素的方式。例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的資料結構的下一個元素。
這種傳統介面已被 Iterator (迭代器)取代,雖然Enumeration 還未被遺棄,但在現代程式碼中已經被很少使用了。儘管如此,它還是使用在諸如Vector(向量)和Properties(屬性)這些傳統類別所定義的方法中,除此之外,還用在一些API類,並且在應用程式中也廣泛被使用。下表總結了一些Enumeration宣告的方法:
序號 | 方法及說明 |
---|---|
位元集合(BitSet)
位元集合類別實作了一組可以單獨設定和清除的位元或標誌。這個類別在處理一組布林值的時候非常有用,你只需要給每個值賦值一"位",然後對位元進行適當的設定或清除,就可以對布林值進行操作了。
一個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)
栈(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类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
Dictionary类已经过时了。在实际开发中,你可以实现 Map 接口来获取键/值的存储功能。
哈希表(Hashtable)
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)
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中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器