Java工具包提供了强大的数据结构。在Java中的数据结构主要包括如下几种接口和类:java
枚举(Enumeration)接口虽然它自己不属于数据结构,但它在其余数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
例如,枚举定义了一个叫nextElement 的方法,该方法用来获得一个包含多元素的数据结构的下一个元素。数组
Enumeration接口中定义了一些方法,经过这些方法能够枚举(一次得到一个)对象集合中的元素。数据结构
Enumeration接口中定义了一些方法,经过这些方法能够枚举(一次得到一个)对象集合中的元素。框架
序号 | 方法描述 | |
---|---|---|
1 | boolean hasMoreElements( ) | 测试此枚举是否包含更多的元素。 |
2 | Object nextElement( ) | 若是此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。 |
位集合类实现了一组能够单独设置和清除的位或标志。
该类在处理一组布尔值的时候很是有用,你只须要给每一个值赋值一"位",而后对位进行适当的设置或清除,就能够对布尔值进行操做了。函数
一个Bitset类建立一种特殊类型的数组来保存位值。BitSet中数组大小会随须要增长。这和位向量(vector of bits)比较相似。
这是一个传统的类,但它在Java 2中被彻底从新设计。工具
BitSet定义了两个构造方法。测试
BitSet()
BitSet(int size)
BitSet中实现了Cloneable接口中定义的方法以下表所列:编码
序号 | 方法描述 | |
---|---|---|
1 | void and(BitSet set) | 对此目标位 set 和参数位 set 执行逻辑与操做。 |
2 | void andNot(BitSet set) | 清除此 BitSet 中全部的位,其相应的位在指定的 BitSet 中已设置。 |
3 | int cardinality( ) | 返回此 BitSet 中设置为 true 的位数。 |
4 | void clear( ) | 将此 BitSet 中的全部位设置为 false。 |
5 | void clear(int index) | 将索引指定处的位设置为 false。 |
6 | void clear(int startIndex, int endIndex) | 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false。 |
7 | Object clone( ) | 复制此 BitSet,生成一个与之相等的新 BitSet。 |
8 | boolean equals(Object bitSet) | 将此对象与指定的对象进行比较。 |
9 | void flip(int index) | 将指定索引处的位设置为其当前值的补码。 |
10 | void flip(int startIndex, int endIndex) | 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每一个位设置为其当前值的补码。 |
11 | boolean get(int index) | 返回指定索引处的位值。 |
12 | BitSet get(int startIndex, int endIndex) | 返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。 |
13 | int hashCode( ) | 返回此位 set 的哈希码值。 |
14 | boolean intersects(BitSet bitSet) | 若是指定的 BitSet 中有设置为 true 的位,而且在此 BitSet 中也将其设置为 true,则返回 true。 |
15 | boolean isEmpty( ) | 若是此 BitSet 中没有包含任何设置为 true 的位,则返回 true。 |
16 | int length( ) | 返回此 BitSet 的"逻辑大小":BitSet 中最高设置位的索引加 1。 |
17 | int nextClearBit(int startIndex) | 返回第一个设置为 false 的位的索引,这发生在指定的起始索引或以后的索引上。 |
18 | int nextSetBit(int startIndex) | 返回第一个设置为 true 的位的索引,这发生在指定的起始索引或以后的索引上。 |
19 | void or(BitSet bitSet) | 对此位 set 和位 set 参数执行逻辑或操做。 |
20 | void set(int index) | 将指定索引处的位设置为 true。 |
21 | void set(int index, boolean v) | 将指定索引处的位设置为指定的值。 |
22 | void set(int startIndex, int endIndex) | 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 true。 |
23 | void set(int startIndex, int endIndex, boolean v) | 将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。 |
24 | int size( ) | 返回此 BitSet 表示位值时实际使用空间的位数。 |
25 | String toString( ) | 返回此位 set 的字符串表示形式。 |
26 | void xor(BitSet bitSet) | 对此位 set 和位 set 参数执行逻辑异或操做。 |
向量(Vector)类和传统数组很是类似,可是Vector的大小能根据须要动态的变化。
和数组同样,Vector对象的元素也能经过索引访问。
使用Vector类最主要的好处就是在建立对象的时候没必要给对象指定大小,它的大小会根据须要动态的变化。.net
Java Vector 类设计
Vector类实现了一个动态数组。和ArrayList和类似,可是二者是不一样的:
Vector主要用在事先不知道数组的大小,或者只是须要一个能够改变大小的数组的状况。
Vector类支持4种构造方法。
Vector()
Vector(int size)
Vector(int size,int incr)
Vector(Collection c)
除了从父类继承的方法外Vector还定义了如下方法:
序号 | 方法描述 | |
---|---|---|
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() | 返回此向量的当前容量。 |
7 | void clear() | 今后向量中移除全部元素。 |
8 | Object clone() | 返回向量的一个副本。 |
9 | boolean contains(Object elem) | 若是此向量包含指定的元素,则返回 true。 |
10 | boolean containsAll(Collection c) | 若是此向量包含指定 Collection 中的全部元素,则返回 true。 |
11 | void copyInto(Object[] anArray) | 将此向量的组件复制到指定的数组中。 |
12 | Object elementAt(int index) | 返回指定索引处的组件。 |
13 | Enumeration elements() | 返回此向量的组件的枚举。 |
14 | void ensureCapacity(int minCapacity) | 增长此向量的容量(若有必要),以确保其至少可以保存最小容量参数指定的组件数。 |
15 | boolean equals(Object o) | 比较指定对象与此向量的相等性。 |
16 | Object firstElement() | 返回此向量的第一个组件(位于索引 0) 处的项)。 |
17 | Object get(int index) | 返回向量中指定位置的元素。 |
18 | int hashCode() | 返回此向量的哈希码值。 |
19 | int indexOf(Object elem) | 返回此向量中第一次出现的指定元素的索引,若是此向量不包含该元素,则返回 -1。 |
20 | int indexOf(Object elem, int index) | 返回此向量中第一次出现的指定元素的索引,从 index 处正向搜索,若是未找到该元素,则返回 -1。 |
21 | void insertElementAt(Object obj, int index) | 将指定对象做为此向量中的组件插入到指定的 index 处。 |
22 | boolean isEmpty() | 测试此向量是否不包含组件。 |
23 | Object lastElement() | 返回此向量的最后一个组件。 |
24 | int lastIndexOf(Object elem) | 返回此向量中最后一次出现的指定元素的索引;若是此向量不包含该元素,则返回 -1。 |
25 | int lastIndexOf(Object elem, int index) | 返回此向量中最后一次出现的指定元素的索引,从 index 处逆向搜索,若是未找到该元素,则返回 -1。 |
26 | Object remove(int index) | 移除此向量中指定位置的元素。 |
27 | boolean remove(Object o) | 移除此向量中指定元素的第一个匹配项,若是向量不包含该元素,则元素保持不变。 |
28 | boolean removeAll(Collection c) | 今后向量中移除包含在指定 Collection 中的全部元素。 |
29 | void removeAllElements() | 今后向量中移除所有组件,并将其大小设置为零。 |
30 | boolean removeElement(Object obj) | 今后向量中移除变量的第一个(索引最小的)匹配项。 |
31 | void removeElementAt(int index) | 删除指定索引处的组件。 |
32 | protected void removeRange(int fromIndex, int toIndex) | 今后 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的全部元素。 |
33 | boolean retainAll(Collection c) | 在此向量中仅保留包含在指定 Collection 中的元素。 |
34 | Object set(int index, Object element) | 用指定的元素替换此向量中指定位置处的元素。 |
35 | void setElementAt(Object obj, int index) | 将此向量指定 index 处的组件设置为指定的对象。 |
36 | void setSize(int newSize) | 设置此向量的大小。 |
37 | int size() | 返回此向量中的组件数。 |
38 | List subList(int fromIndex, int toIndex) | 返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)。 |
39 | Object[] toArray() | 返回一个数组,包含此向量中以恰当顺序存放的全部元素。 |
40 | Object[] toArray(Object[] a) | 返回一个数组,包含此向量中以恰当顺序存放的全部元素;返回数组的运行时类型为指定数组的类型。 |
41 | String toString() | 返回此向量的字符串表示形式,其中包含每一个元素的 String 表示形式。 |
42 | void trimToSize() | 对此向量的容量进行微调,使其等于向量的当前大小。 |
栈(Stack)实现了一个后进先出(LIFO)的数据结构。
你能够把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其余元素的顶部。
当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最早被取出。
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
堆栈只定义了默认构造函数,用来建立一个空栈。 堆栈除了包括由Vector定义的全部方法,也定义了本身的一些方法。
Stack()
除了由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类类似。
给出键和值,你就能够将值存储在Dictionary对象中。一旦该值被存储,就能够经过它的键来获取它。因此和Map同样, Dictionary 也能够做为一个键/值对列表。
Dictionary 定义的抽象方法以下表所示:
序号 | 方法描述 | |
---|---|---|
1 | Enumeration elements( ) | 返回此 dictionary 中值的枚举。 |
2 | Object get(Object key) | 返回此 dictionary 中该键所映射到的值。 |
3 | boolean isEmpty( ) | 测试此 dictionary 是否不存在从键到值的映射。 |
4 | Enumeration keys( ) | 返回此 dictionary 中的键的枚举。 |
5 | Object put(Object key, Object value) | 将指定 key 映射到此 dictionary 中指定 value。 |
6 | Object remove(Object key) | 今后 dictionary 中移除 key (及其相应的 value)。 |
7 | int size( ) | 返回此 dictionary 中条目(不一样键)的数量。 |
Dictionary 类已通过时了。在实际开发中,你能够实现Map接口来获取键/值的存储功能。
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。
例如,在地址列表的哈希表中,你能够根据邮政编码做为键来存储和排序数据,而不是经过人名。
哈希表键的具体含义彻底取决于哈希表的使用情景和它包含的数据。
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。
然而,Java 2 重构的Hashtable实现了Map接口,所以,Hashtable如今集成到了集合框架中。它和HashMap类很类似,可是它支持同步。
像HashMap同样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用做键的对象,以及要连接到该键的值。
而后,该键通过哈希处理,所获得的散列码被用做存储在该表中值的索引。
Hashtable()
Hashtable(int size)
Hashtable(int size,float fillRatio)
Hashtable(Map m)
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 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。 |