Hashtable 与HashMap 的区别
来源:互联网 发布:现代言情推荐 知乎 编辑:程序博客网 时间:2024/06/05 07:39
Hashtable与HashMap都实现了Map接口,主要区别在于:
线程安全性,同步(synchronization) 和 速度
①Hashtable不允许有null(key和value都不行),HashMap允许有null(key和value都可以)
②HashMap中只允许有一个null的key,但是可以有多个null的value。即当调用get()是否等于null,不能判断是否存在该键,因为null既可以表示不存在该键,也可以表示该键为null。
③HashTable用 Enumeration,HashMap用iterat进行遍历
④HashTable是线程安全的,HashMap是线程不安全的。因为HashTable的实现运用了synchronized锁,而HashMap则是非synchronized的。多个线程可以共享HashTbale,但是如果多个线程没有正确的同步性的话,是不能共享HashMap
public class test { public static void main(String[] args){ HashMap<Integer,String> hm=new HashMap<Integer,String>(); Hashtable<Integer,String> ht=new Hashtable<Integer,String>(); //验证HashMap可以存在null,而Hashtable不允许存在 hm.put(0, "M_first"); hm.put(1, "M_second"); hm.put(2, "M_third"); hm.put(null, null); ht.put(0, "T_first"); ht.put(1, "T_second"); ht.put(2, "T_third"); //ht.put(null, null); //去掉上一行的注释符则编译错误 //Hashtable---enumeration与HashMap---iterator的区别 //enumeration是JDK1.0时候推出的,是最好的迭代输出接口,JAK1.5之后为此类进行了扩充 //增加了泛型的操作应用;enumeration接口常用的方法为hasMoreElements()(判断是否有下一 //个值,nextElements()(取出当前元素),这些方法与iterator相似,但是iterator有删除操作 //因为Hashtable没有实现iterable接口 //public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable Iterator<Integer> sm_k=hm.keySet().iterator();//使用迭代器获取key Iterator<Entry<Integer, String>> sm_kv=hm.entrySet().iterator();//使用迭代器获取key_value对// Collection<String> sm_v=hm.values();//将value映射到collection视图// Iterator sv=sm_s.iterator();//利用迭代器获取// while(sv.hasNext()) System.out.print(sv.next()+" "); //HashMap的value Enumeration<String> st_v=ht.elements(); Enumeration<Integer> st_k=ht.keys();//使用枚举获得KEY Set<Entry<Integer,String>> st_kv=ht.entrySet(); System.out.println("HashMap"); while(sm_k.hasNext()){ System.out.println(" KEY: "+sm_k.next()+" VALUE: "+sm_kv.next()); }// while(sm_kv.hasNext())System.out.print(sm_kv.next()+" "); System.out.println(); System.out.println("Hashtable"); while(st_k.hasMoreElements()){ System.out.println("KEY: "+st_k.nextElement()+" VALUE: "+st_v.nextElement()+" "); }// while(st_v.hasMoreElements())System.out.print(st_v.nextElement());}}
**而且由上面结果也可以得出iterator迭代的话是从小往大遍历的
而由enumeration遍历的话则是从大到小的**
0 0
- HashTable与HashMap的区别
- HashMap与Hashtable的区别
- Hashtable与HashMap的区别:
- HashMap 与 Hashtable 的区别?
- HashMap与HashTable的区别
- HashMap与Hashtable的区别
- HashMap与Hashtable的区别
- HashTable与HashMap的区别
- Hashtable与HashMap的区别
- HashMap与Hashtable的区别
- HashMap与HashTable的区别?
- hashtable与hashmap的区别
- HashMap与Hashtable的区别
- HashMap与Hashtable的区别
- HashMap与Hashtable的区别
- HashMap与Hashtable的区别
- hashtable与hashmap的区别
- HashMap与Hashtable的区别
- web项目中路径的获取和遇到问题的解决方法
- lesson1 ODE的几何解法:方向场,积分曲线
- Java进阶(I/O系统)
- 深入浅出RxJava(基础篇)
- UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解
- Hashtable 与HashMap 的区别
- HDU 4325&& nyoj 600 Flowers【线段树+坐标离散化】
- (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)
- Java进阶(多线程机制的基本操作)
- Windows 8安装Open edX
- 一起学libcef--搭建自己的libcef运行环境(Win32程序,错误C2220解决方案)
- Java进阶(synchronized对象锁)
- leetcode Lowest Common Ancestor of a Binary Tree
- 初学Linux的一些理解及简单介绍