java工具包提供了强大的数据结构,在java中的数据结构主要包括以下几种接口和类 :
枚举(Enumeration)
位集合(BitSet)
向量(Vector)
栈(Stack)
字典(Dictionary)
哈希表(Hashtable)
属性(Properties)
枚举(Enumeration)
枚举接口虽然本身不属于数据结构,但它在其他数据结构的范畴里应用很广,枚举接口定义了一种从数据结构中取回连续元素的方式
例如,枚举定义了一个叫NEXElement的方法,该方法用来得到一个包含多元素的数据结构的下一个元素
Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素
这种接口传统类所定义的方法中,除此之外,还用一些API类,并且在应用中也被广泛使用,
Enumeration声明的方法:
实例:
打印结果:
位集合(BitSet)
位集合实现了一组可以单独设置和清除的位或标志
该类在处理一组布尔值的时候非常有用,你只需要给每个赋值一“位”,然后对位进行适当的设置或清除,就可以对布尔值进行操作了
一个BitSet类创建一种特殊类型的数组来保存位值,BitSet中数组大小会随需要增加,这和位向量(vevtor of bits)比较类似,这是一个传统的类但它在java2中完全被重新设计
BitSet定义了两个构造方法
第一个构造方法创建一个默认的对象
BitSet()
第二个方法允许用户指定初始大小,所有位初始化为0
BitSet(int size)
BitSet中实现了Cloneable接口中定义的方法如下表所列:
实例:
打印结果:
向量(Vector):
向量类和传统数组非常相似,但是Vector的大小能根据需要动态的变化和数组一样,Vector对象的元素也能通过索引访问
使用Vector类最重要的好处就是创建对象的时候不必指定大小,它的大小会根据需要动态变化
Vector类实现了一个动态数组,和ArrayList很相似,但是两者是不同的:
Vector是同步访问的
Vector包含了许多传统的方法,这些方法不属于集合框架
Vector主要用在实现不知道数组的大小,或者只是需要一个可以改变大小的数组的情况
Vector类支持4种构造方法:
第一种构造方法创建一个默认的向量,默认大小为10;
Vector()
第二种构造方法创建指定大小的向量
Vector(int size)
第三种构造方法创建指定大小的向量,并且增量用incr指定,增量表示向量每次增加的元素数目
Vector(int size,int incr)
第四种构造方法创建一个包含集合c元素的向量
Vector(Collection c)
除了从父类继承的方法外Vector还定义了以下方法:
实例:
打印结果:
栈(Stack)
栈(Stack)实现了一个后进先出(LIFO)的数据结构
可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部
当你从栈中取元素的时候,就从栈顶取一个元素,换句话说,最后进栈的元素最先被取出
栈是Vector的一个子类,它实现了一个标准的后进先出的栈
堆栈只定义了默认构造函数,用来创建一个空间,堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法
Stack()
除了由Vector定义的所有方法,自己也定义了一些方法
实例:
打印结果:
字典(Dictionary)
字典(Dictionary)类是一个抽象类,它定义了键映射到值的数据结构
当你想要通过特定的键而不是整数索引类访问数据的时候,这时候应该使用Dictionary
由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现
Dictionary类是一个抽象类,用来储存键/值对,作用和Map类相似
给出键和值,你就可以将值储存在Dictionary对象中,一旦该值被存储,就可以通过它的键来获取它,所以和Map一样,Dictionary也可以作为一个键/值对列表
Dictionary定义的抽象方法如表所示:
Dictionary类已经过时了,在实际开发中,你可以实现Map接口来获取键/值的存储功能
哈希表(Hashtable)
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段
例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名
哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据
Hashtable是原始的java.util的一部分,是一个Dictionary具体的实现
然而,java2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中,它和HashMap类很相似,但它支持同步
像HashMap一样,HashTable在哈希表中存储键/值对,当使用一个哈希表,要指定作键的对象,以及要链接到该键的值
然后,该键经过哈希处理,所得到的散码被用存储在该表中值的索引
Hashtable定义了四个构造方法,
第一个是默认构造方法:
Hashtable()
第二个构造函数创建指定大小的哈希表:
Hashtable(int size)
第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例
填充比例必须介于0.0和0.1之间,它决定了哈希表在重新调整大小之前的充满程度:
Hashtable(int size,float fillRatio)
第四个构造方法创建一个以M中元素为初始化元素的哈希表
哈希表的容量被设置为M的两倍
Hashtable(Map m)
Hashtable中除了从接口中定义的方法外,还定义了以下方法
实例:
打印结果:
属性(Properties)
Properties继承于Hashtable.Properties类表示了一个持久的属性集,属于列表中每个键及其对应值都是一个字符串
Properties类被许多java类使用,例如,在获取环境变量时它就作为System.getProrerties()方法的返回值
Properties定义如下实例变量,这个变量持有一个Properties对象相关的默认属性列表
Properties defaults;
Properties类定义了两个构造方法,第一个构造方法没有默认值
Properties()
第二个构造方法使用propDefault作为默认值,两种情况下,属性列表都为空
Properties(Properties propDefault)
除了从HashTable中所定义的方法,Properties还定义了以下方法:
实例:
打印结果: