Java提供了一下几种数据结构:
枚举(Enumeration)
位集合(BitSet)
向量(Vector)
栈(Stack)
字典(Dictionary)
哈希表(Hashtable)
属性(Properties)
Java2中引入了一种新的框架-集合框架(Collection)。
一、枚举 Enumeration
static void enumerationTest() {
Enumeration<String> days;
Vector<String> dayNames = new Vector<String>();
dayNames.add("monday");
dayNames.add("tuesday");
dayNames.add("wednesday");
days = dayNames.elements();
while (days.hasMoreElements())
System.out.println(days.nextElement());
}
输出结果:
monday
tuesday
wednesday
二、Bitset类
Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。
1. 构造方法:
创建一个默认的对象: BitSet()
指定初始大小,所有位初始化为0: BitSet(int size)
2. BitsetCloneable接口中定义的方法:
Bitset bit1 = new Bitset(16);
Bitset bit2 = new BItset(16);
void and(Bitset bit); //bit1.and(bit2)
void or(Bitset bit); //对此位 set 和位 set 参数执行逻辑或操作。bit1.or(bit2);
void xor(Bitset bit); //对此位 set 和位 set 参数执行逻辑异或操作。bit1.xor(bit2);
void andNot(BitSet set) //清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。
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 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(不包括)范围内的位设置为指定的值。
boolean get(int index); //返回指定索引处的位值。
BitSet get(int startIndex, int endIndex); //返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。
三、Stack类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
语法格式:
Stack(); //创建一个空栈
Stack 方法
1. boolean empty(); //是否为空
2. Object peek(); //查看栈顶对象
3. Object pop(); //取栈顶对象
4. Object push(Object element); //对象入栈
5. int search(Object element); //查询对象在栈中的位置,以1为基数
实例:
static void MyStackTest() {
Stack<Integer> stack = new Stack<Integer>();
System.out.println("stack " + stack);
System.out.println("empty " + stack.empty());
for (int i = 0; i < 10; i++)
stack.push(i);
System.out.println("6 index: " + stack.search(6));
System.out.println("Stack object:");
for(int j = 0; j < 10; j++)
System.out.print(stack.pop() +"\t");
}
输出结果:
stack []
empty true
6 index: 4
Stack object:
9 8 7 6 5 4 3 2 1 0
四、Hashtable类
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。Java 2 重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似,但是它支持同步。像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
构造方法:
1. Hashtable();
2. Hashtable(int size); //指定大小
3. Hashtable(int size, float fillRatio); //指定大小,并且同时指定填充比例[0.0, 1.0],
4. Hashtable(Map m); //指定hash表初始化元素的值是M中的元素,Hashtable容量是M的两倍。
Hashtable内置方法:
1. void clear();
2. Object clone();
3. boolean contains(Object value);
4. boolean containsKey(Object key);
5. boolean containsValue(Object value);
7. Object get(Object key);
8. Object put(Object key, Object value);
9. Object remove(Object key);
10. Enumeration keys();
11. int size();
12. void rehash();
13. boolean isEmpty();
14. String toString();
实例:
static void MyHashtableTest() {
Enumeration name;
double score;
Hashtable stud = new Hashtable();
stud.put("lili", new Double(89.0));
stud.put("yoyo", 99.0);
stud.put("yiyi", 88);
name = stud.keys();
System.out.println("show students info:");
while(name.hasMoreElements()) {
//System.out.println(name.nextElement() + stud.get((String)name.nextElement()));
String str = (String)name.nextElement();
System.out.println(str + "'s score "+ stud.get(str));
}
System.out.println();
}
输出结果:
show students info:
yiyi's score 88
lili's score 89.0
yoyo's score 99.0
五、Vector类
Vector类跟ArrayList很相似,它实现了一个动态数组。但两者又有区别,首相Vector是同步访问的,另外Vector包含了传统的方法,并且这些方法不属于i集合框架。
Vector主要应用在事先不知道数组大小或需要改变数组大小的情况。
Vector构造方法:
1. Vector(); //默认大小为10
2. Vector(int size); //指定大小
3. Vector(int size, int incr); //指定大小同时指定增量(向量每次增加的元素的数目)。
4. Vector(Collection c); //包含集合c元素的向量。
Vector方法:
1. void add(int index, Ojbect element);
2. boolean add(Object o);