一、枚举
枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
方法描述:
1、boolean hasMoreElements( )
测试此枚举是否包含更多的元素。
2、Object nextElement( )
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
package com;
import java.util.Enumeration;
import java.util.Vector;
public class EnumerationTest{
public static void main(String args[]) {
Enumeration<String> days;
Vector<String> dayNames=new Vector<String>();
dayNames.add("Sunday");
dayNames.add("Monday");
dayNames.add("Tuesday");
dayNames.add("Wednesday");
dayNames.add("Thursday");
dayNames.add("Friday");
dayNames.add("Saturday");
days=dayNames.elements();
while(days.hasMoreElements()) {
System.out.println(days.nextElement());
}
}
}
输出结果:
二、栈
栈(Stack)实现了一个后进先出(LIFO)的数据结构,是Vector的一个子类。
你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。
当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。
方法描述:
- boolean empty()
测试堆栈是否为空。 - Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。 - Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。 - Object push(Object element)
把项压入堆栈顶部。 - int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。
package com;
import java.util.EmptyStackException;
import java.util.Stack;
//后进先出
public class StackDemo{
//插入
static void showup(Stack st,int a) {
st.push(new Integer(a));
System.out.println(“push(”+a+")");
System.out.println(“stack:”+st);
}
//移除
static void showpop(Stack st) {
System.out.print(“pop->”);
Integer a=(Integer)st.pop();
System.out.println(a);
System.out.println(“stack:”+st);
}
public static void main(String args[]) {
Stack<Integer> st=new Stack<Integer>();
System.out.println("stack:"+st);//输出:stack:[]
showup(st,44);/*输出: push(44)
stack:[44]*/
showup(st,66);/*输出: push(66)
stack:[44,66]*/
showup(st,99);/*输出: push(99)
stack:[44,66,99]*/
showpop(st);/*输出: pop->99
stack:[44, 66]*/
showpop(st);/*输出: pop->66
stack:[44]*/
showpop(st);/*输出: pop->44
stack:[]*/
//栈为空时再移除
try {
showpop(st);
}catch(EmptyStackException e) {
System.out.println("empty stack");//输出:pop->empty stack
}
}
}
三、哈希表
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。
例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。
哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。
方法详情:
- void clear( )
将此哈希表清空,使其不包含任何键。 - Object clone( )
创建此哈希表的浅表副本。 - boolean contains(Object value)
测试此映射表中是否存在与指定值关联的键。 - boolean containsKey(Object key)
测试指定对象是否为此哈希表中的键。 - boolean containsValue(Object value)
如果此 Hashtable 将一个或多个键映射到此值,则返回 true。 - Enumeration elements( )
返回此哈希表中的值的枚举。 - Object get(Object key)
返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。 - boolean isEmpty( )
测试此哈希表是否没有键映射到值。 - Enumeration keys( )
返回此哈希表中的键的枚举。 - Object put(Object key, Object value)
将指定 key 映射到此哈希表中的指定 value。 - void rehash( )
增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。 - Object remove(Object key)
从哈希表中移除该键及其相应的值。 - int size( )
返回此哈希表中的键的数量。 - String toString( )
返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。
package com;
import java.util.Enumeration;
import java.util.Hashtable;
public class HashTableDemo{
public static void main(String args[]) {
//新建哈希表
Hashtable balance=new Hashtable();
Enumeration names;
String str;
double bal;
//插入
balance.put("Zara", new Double(3434.34));
balance.put("Mahnaz", new Double(123.22));
balance.put("Ayan", new Double(1378.00));
balance.put("Daisy", new Double(99.22));
balance.put("Qadir", new Double(-19.08));
//显示所有元素
names=balance.keys();
while(names.hasMoreElements()) {
str=(String)names.nextElement();
System.out.println(str+":"+balance.get(str));
}
System.out.println();
//把键值Zara的元素在原来的基础上加1000
bal=((Double)balance.get("Zara")).doubleValue();
balance.put("Zara", new Double(bal+1000));
System.out.println("Zara's new balance: "+balance.get("Zara"));
}
}