Hashtable源码及详细介绍:Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
首先,可以用HashMap完全代替Hashtable的使用,Hashtable是比较老的集合了,它继承于Dictionary。较HashMap的不同在于它是线程安全的,而且它支持通过Enumeration去遍历。
Enumeration接口是Iterator迭代器的“古老版本”,从JDK 1.0开始,Enumeration接口就已经存在了(Iterator从JDK 1.2才出现)。Enumeration接口只有两个方法。
boolean hasMoreElements()
如果此迭代器还有剩下的元素,则返回true
Object nextElement()
返回该迭代器的下一个元素,如果还有的话(否则抛出异常)
Enumeration迭代器只能遍历Vector、Hashtable这种古老的集合,因此通常不要使用它,除非在某些极端情况下,不得不使用Enumeration,否则都应该选择Iterator迭代器。对于ArrayList、HashMap等集合类,都不再支持使用Enumeration迭代器。
Enumeration接口介绍来自:Java集合之Enumeration
下面是Enumeration迭代器遍历HashTable代码:
// 代码实现
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
public class hashtable {
public static void main(String[] args) {
// TODO Auto-generated method stub
Hashtable<String, Integer> table = new Hashtable<>();
table.put("ab1", 10);
table.put("ab3", 20);
table.put("ab2", 30);
table.put("ab4", 40);
// 遍历时获取key或value最好选择下列三种之一,效率较高
Iterator<?> it = table.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>)it.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Enumeration<?> enu = table.keys();
while(enu.hasMoreElements()) {
System.out.print(enu.nextElement() + " ");
}
System.out.println();
enu = table.elements();
while(enu.hasMoreElements()) {
System.out.print(enu.nextElement() + " ");
}
System.out.println();
}
}
继续加油~