Java Hashtable遍历与方法使用
参考文档
我参考了Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例,阅读了jdk 1.8的源码
Hashtable的继承关系
Hashtable继承了Dictionary类,实现了Map、Cloneable、Serializable接口
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
Hashtable数据结构
依赖的数组和链表,跟HashMap不一样的
Hashtable是线程安全的
共有方法就是线程安全的方法
Hashtable遍历方法
通过entrySet()去遍历,效率高
通过keySet()去遍历key,效率低
通过values遍历
通过Enumeration keys遍历
通过Enumeration elements遍历
使用例子
import lombok.extern.slf4j.Slf4j;
import java.io.ObjectStreamException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
@Slf4j
public class HashtableTest {
public static void main(String[] args) {
Hashtable hashtable = new Hashtable();
Random ran = new Random();
for (int i = 0; i < 5; i++) {
int tmp=ran.nextInt(1000);
hashtable.put(Integer.valueOf(i),String.valueOf(tmp));
}
//测试遍历
iteratorEntrySet(hashtable);
iteratorKeySet(hashtable);
iteratorValues(hashtable);
enumerationKeys(hashtable);
enumerationElements(hashtable);
//打印table
log.info("table :{}",hashtable);
//键值对个数
log.info("table size {}",hashtable.size());
//包含键
log.info("contans key 1 :{}",hashtable.containsKey(Integer.valueOf(1)));
//包含values
//remove key
log.info("remove key :{}",hashtable.remove(Integer.valueOf(1)));
log.info("after remove ,table size {}",hashtable.size());
//clear
log.info("clear table ");
hashtable.clear();
//is empety
log.info("is empty: {}", hashtable.isEmpty());
}
//entrySet()去遍历
public static void iteratorEntrySet(Hashtable hashtable) {
Set entry = hashtable.entrySet();
Iterator<Map.Entry> it = entry.iterator();
log.info("iteratorEntrySet:");
while (it.hasNext()) {
Map.Entry entry1=it.next();
log.info("key :{}, value :{}", entry1.getKey(), entry1.getValue());
//下面的逻辑是错误的,it.next()执行了两次,可能为空
//log.info("key :{}, value :{}", it.next().getKey(), it.next().getValue());
}
}
//keySet()去遍历key
public static void iteratorKeySet(Hashtable hashtable){
Set set =hashtable.keySet();
log.info("iteratorKeySet");
Iterator it =set.iterator();
while(it.hasNext()){
Object key =it.next();
log.info("key :{}, value :{}",key,hashtable.get(key));
}
}
//values遍历
public static void iteratorValues(Hashtable hashtable){
Collection values=hashtable.values();
log.info("iteratorValues");
Iterator it =values.iterator();
while(it.hasNext()){
log.info("value :{}",it.next());
}
}
//Enumeration keys遍历
//内部类实现接口Enumeration,通过TYPE实现hasMoreElements() nextElement()方法
public static void enumerationKeys(Hashtable hashtable){
Enumeration keys = hashtable.keys();
log.info("enumerationKeys");
while(keys.hasMoreElements()){
Object key =keys.nextElement();
log.info("key :{}, value :{}",key,hashtable.get(key));
}
}
//Enumeration elements遍历
public static void enumerationElements(Hashtable hashtable){
Enumeration values =hashtable.elements();
log.info("enumerationElements");
while(values.hasMoreElements())
{
Object value =values.nextElement();
log.info("value : {}",value);
}
}
}
运行结果
D:\zxems\work\OpenJdk\8\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=52315:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=GB2312 -classpath D:\zxems\work\OpenJdk\8\jre\lib\charsets.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\access-bridge-64.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\cldrdata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\dnsns.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\jaccess.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\localedata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\nashorn.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunec.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunjce_provider.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunmscapi.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunpkcs11.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\zipfs.jar;D:\zxems\work\OpenJdk\8\jre\lib\jce.jar;D:\zxems\work\OpenJdk\8\jre\lib\jsse.jar;D:\zxems\work\OpenJdk\8\jre\lib\management-agent.jar;D:\zxems\work\OpenJdk\8\jre\lib\resources.jar;D:\zxems\work\OpenJdk\8\jre\lib\rt.jar;D:\My\code\javalearn\java-learn\target\classes;D:\My\tools\maven\repo\org\slf4j\slf4j-log4j12\1.7.2\slf4j-log4j12-1.7.2.jar;D:\My\tools\maven\repo\org\slf4j\slf4j-api\1.7.2\slf4j-api-1.7.2.jar;D:\My\tools\maven\repo\log4j\log4j\1.2.17\log4j-1.2.17.jar java.javabase.map.HashtableTest
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - iteratorEntrySet:
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :4, value :771
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :3, value :567
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :2, value :933
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :1, value :421
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :0, value :304
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - iteratorKeySet
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :4, value :771
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :3, value :567
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :2, value :933
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :1, value :421
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :0, value :304
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - iteratorValues
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value :771
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value :567
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value :933
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value :421
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value :304
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - enumerationKeys
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :4, value :771
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :3, value :567
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :2, value :933
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :1, value :421
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - key :0, value :304
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - enumerationElements
2019-07-15 16:57:21,254 [main] INFO java.javabase.map.HashtableTest - value : 771
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - value : 567
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - value : 933
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - value : 421
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - value : 304
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - table :{4=771, 3=567, 2=933, 1=421, 0=304}
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - table size 5
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - contans key 1 :true
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - remove key :421
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - after remove ,table size 4
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - clear table
2019-07-15 16:57:21,269 [main] INFO java.javabase.map.HashtableTest - is empty: true
Process finished with exit code 0
Java Hashtable遍历与方法使用的更多相关文章
- java集合类遍历删除方法测试以及使用场景记录
package test0; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java. ...
- java List遍历的方法
List可以用序号来遍历,但通常推荐使用iterator来遍历Iterator itr = list.iterator();while (itr.hasNext()) { Object nextObj ...
- java 数组遍历(方法内部的代码)
//数组遍历(依次输出数组中的每一个元素)二维数组: int[][] arr={{1,2},{3,4,5},{6,7}}; for(int i=0;i<arr.length;i++){ for( ...
- Java中遍历Map集合的四种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- Java中遍历map的四种方法 - 转载
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- java 遍历map 方法 集合 五种的方法
package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...
- Java中遍历Map的几种方法
转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...
- java中遍历MAP,嵌套map的几种方法
java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>(); map.put("us ...
随机推荐
- Python 命令行参数的输入方式(使用pycharm)
形式一: 第一个红色框为命令行参数 第二个框为控制台模式(Terminal) 形式二 点击运行:点击红色框 编辑配置 如下图:红色框即为设置的命令行参数
- 关于报错:Warning: Cannot modify header information - headers already sent by (output started at
8月5日,第一个项目即将完成,测试时,发现登录功能会出现小问题:记住密码的时候会报错 Warning: Cannot modify header information - headers alrea ...
- Linux 笔记:文件名
文件名 Linux 系统区分英文字符的大小写.比如,myfile, Myfile 和 myFILE表示的是三个不同的文件.同样,用户密码和登录名也需要区分大小写(这里沿用了Unix 和 C 语言的命名 ...
- 13. 为什么我们会需要 Pod?
13. 为什么我们会需要 Pod? 13.1 docker容器的本质 """ docker容器的本质 是进程. 主要通过 Namespace 做隔离,Cgroups 做限 ...
- 阅读build to win的个人感想
一个程序员要向各个方面学习,向市场.向用户学习等,不能局限于一方面.除此以外还要有自己的想法,要懂得创新,也需要在各个方面都有所突破,有所超越,实力才是取得胜利的根关键.
- iOS 开发之 设计模式【一】原型模式 (Prototype pattern)
原型模式(Prototype pattern): 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建对象.也可以理解为模板,在创建新对象的时候,按照模板的方法来复制,避免重复造轮子. 简单来 ...
- SQL mybatis动态查询小结
动态返回mysql某张表指定列的名字 <select id="queryColumns" resultType="map" parameterType=& ...
- redhat7.6 AIDE 系统文件完整性检查工具
1.安装AIDE yum install aide 安装完的配置文件,在/etc/aide.conf 自定义/etc/aide.conf 下面我写了对 /data/data1 目录做CONTE ...
- Python 之并发编程之线程下
七.线程局部变量 多线程之间使用threading.local 对象用来存储数据,而其他线程不可见 实现多线程之间的数据隔离 本质上就是不同的线程使用这个对象时,为其创建一个只属于当前线程的字典 拿空 ...
- Java入门笔记 03-面向对象(上)
介绍:Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成是一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量.也就是说,所有类都是引用类型.Java也支持面向对象的 ...