Java数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
枚举 Enumeration
位集合 BitSet
向量 Vector
栈 Stack
字典 Dictionary
哈希表 Hashtable
属性 Properties
枚举(Enumeration)
枚举接口虽然本身不属于数据结构,但是它在其他数据结构的范畴里应用很多。枚举接口定义了一种从数据结构中取回连续元素的方式。
常用另种方法:
boolean hasMoreElements()
Object nextElement()
实例:
import java.util.*;
public class Main {
public static void main(String[] args) {
Enumeration<String> days;
Vector<String> dayNames = new Vector<String>();
dayNames.add("Sunday");
dayNames.add("Monday");
dayNames.add("Tuesday");
days = dayNames.elements();
while(days.hasMoreElements()){
System.out.println(days.nextElement());
}
}
}
位集合
位集合实现了一组可以单独设置和清除的位或标志。
该类在处理一组布尔值的时候非常有用,你只需要给每个赋值一“位”,然后对位进行适当的设置或清除,就可以对布尔值进行操作了。
一个BitSet类创建一种特殊类型的数组来保存位值。BitSet中数组大小会岁需要增加。
BitSet定义了两个构造方法:
1.BitSet()
2.BitSet(int size) //允许初始化大小,所有位初始化为0.
public class Main {
public static void main(String[] args) {
BitSet bitSet1 = new BitSet(16);
BitSet bitSet2 = new BitSet(16);
for(int i = 0; i < 16; i++){
if((i % 2 == 0))
bitSet1.set(i);
if((i % 5 != 0))
bitSet2.set(i);
}
//bitSet1的初始值
System.out.println(bitSet1);
//bitSet2的初始值
System.out.println(bitSet2);
// and()、or()、xor()方法
bitSet2.xor(bitSet1);
System.out.println(bitSet2);
}
}
向量 Vector
向量类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问.
public class Main {
public static void main(String[] args) {
Vector vector = new Vector(3, 2);
System.out.println(vector.size());
System.out.println(vector.capacity());
vector.addElement(new Integer(1));
vector.addElement(new Integer(2));
vector.addElement(new Integer(3));
vector.addElement(new Integer(4));
//返回此向量当前的容量
System.out.println(vector.capacity());
vector.addElement(new Double(8.88));
System.out.println(vector.capacity());
vector.addElement(new String("Jack"));
System.out.println(vector.capacity());
//返回此向量中的组件数
System.out.println(vector.size());
System.out.println(vector.firstElement());
System.out.println(vector.lastElement());
Enumeration vectorEnum = vector.elements();
while(vectorEnum.hasMoreElements()){
System.out.print(vectorEnum.nextElement() + " ");
}
}
}
栈(Stack)
栈实现了一个后进先出的数据结构
栈是Vector的一个子类。
堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由oVector定义的所有方法,也定义了自己的一些方法。
public class Main {
public static void main(String[] args) {
Stack<String> stack = new Stack<String>();
stack.push("001");
stack.push("jack");
System.out.println(stack);
stack.push("Madge");
System.out.println(stack.peek());
System.out.println(stack.empty());
System.out.println(stack);
String str = stack.pop();
System.out.println(str);
}
}
字典 Dictionary
字典类是一个抽象类,它定义了键映射到值的数据结构。
哈希表(Hashtable)
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。
Hashtable是原始的java.util的一部分,是一个Dictionary具体的实现。
它和HashMap类很相似,但是它支持同步。
public class Main {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("Jack", 100);
System.out.println(table.get("Jack"));
table.put("Madge", 100);
System.out.println(table);
}
}
属性(Properties)
Properties继承于Hashtable. Properties 类表示了一个持久的属性集。属性列表中每个键及其对应值都是一个字符串。
Properties类被许多Java类使用。在获取环境变量时它就作为System.getProperties()方法的返回值。
public class Main {
public static void main(String[] args) {
Properties capitals = new Properties();
capitals.put("China", "Beijing");
capitals.put("US", "Washington");
capitals.put("England", "Longdon");
Set states = capitals.keySet();
Iterator ite = states.iterator();
while(ite.hasNext()){
String str = (String)ite.next();
System.out.println(str + " = " + capitals.getProperty(str));
}
}
}