Java 数据结构

Java 数据结构

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括如下几种接口和类:java

  • 枚举(Enumeration)
  • 位集合(BitSet)
  • 向量(Vector)
  • 栈(Stack)
  • 字典(Dictionary)
  • 哈希表(Hashtable)
  • 属性(Properties)
  • 集合框架(Collection

枚举(Enumeration)

枚举(Enumeration)接口虽然它自己不属于数据结构,但它在其余数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
例如,枚举定义了一个叫nextElement 的方法,该方法用来获得一个包含多元素的数据结构的下一个元素。数组

Java Enumeration 接口

Enumeration接口中定义了一些方法,经过这些方法能够枚举(一次得到一个)对象集合中的元素。数据结构

Enumeration接口中定义了一些方法,经过这些方法能够枚举(一次得到一个)对象集合中的元素。框架

序号 方法描述
1 boolean hasMoreElements( ) 测试此枚举是否包含更多的元素。
2 Object nextElement( ) 若是此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

位集合(BitSet)

位集合类实现了一组能够单独设置和清除的位或标志。
该类在处理一组布尔值的时候很是有用,你只须要给每一个值赋值一"位",而后对位进行适当的设置或清除,就能够对布尔值进行操做了。函数

Java Bitset 类

一个Bitset类建立一种特殊类型的数组来保存位值。BitSet中数组大小会随须要增长。这和位向量(vector of bits)比较相似。
这是一个传统的类,但它在Java 2中被彻底从新设计。工具

BitSet定义了两个构造方法。测试

  1. 第一个构造方法建立一个默认的对象:
BitSet()
  1. 第二个方法容许用户指定初始大小。全部位初始化为0。
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对象的元素也能经过索引访问。
使用Vector类最主要的好处就是在建立对象的时候没必要给对象指定大小,它的大小会根据须要动态的变化。.net

Java Vector 类设计

Vector类实现了一个动态数组。和ArrayList和类似,可是二者是不一样的:

  • Vector是同步访问的。
  • Vector包含了许多传统的方法,这些方法不属于集合框架。

Vector主要用在事先不知道数组的大小,或者只是须要一个能够改变大小的数组的状况。

Vector类支持4种构造方法。

  1. 第一种构造方法建立一个默认的向量,默认大小为10:
Vector()
  1. 第二种构造方法建立指定大小的向量。
Vector(int size)
  1. 第三种构造方法建立指定大小的向量,而且增量用incr指定. 增量表示向量每次增长的元素数目。
Vector(int size,int incr)
  1. 第四种构造方法建立一个包含集合c元素的向量:
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)

栈(Stack)实现了一个后进先出(LIFO)的数据结构。
你能够把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其余元素的顶部。
当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最早被取出。

Java Stack 类

栈是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类是抽象类,因此它只提供了键映射到值的数据结构,而没有提供特定的实现。

Java 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 Hashtable 类

Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。
然而,Java 2 重构的Hashtable实现了Map接口,所以,Hashtable如今集成到了集合框架中。它和HashMap类很类似,可是它支持同步。
像HashMap同样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用做键的对象,以及要连接到该键的值。
而后,该键通过哈希处理,所获得的散列码被用做存储在该表中值的索引。

  1. Hashtable定义了四个构造方法。第一个是默认构造方法:
Hashtable()
  1. 第二个构造函数建立指定大小的哈希表:
Hashtable(int size)
  1. 第三个构造方法建立了一个指定大小的哈希表,而且经过fillRatio指定填充比例。填充比例必须介于0.0和1.0之间,它决定了哈希表在从新调整大小以前的充满程度:
Hashtable(int size,float fillRatio)
  1. 第四个构造方法建立了一个以M中元素为初始化元素的哈希表。哈希表的容量被设置为M的两倍。
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 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。
相关文章
相关标签/搜索