博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashTable和HashMap区别
阅读量:2304 次
发布时间:2019-05-09

本文共 1177 字,大约阅读时间需要 3 分钟。

HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合。

HashTable和HashMap区别

第一,继承的父类不同。

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

 

[java] 
 
  1. public class Hashtable<K,V>  
  2. extends Dictionary<K,V>  
  3. implements Map<K,V>, Cloneable, Serializable  
  4.   
  5. public class HashMap<K,V>  
  6. extends AbstractMap<K,V>  
  7. implements Map<K,V>, Cloneable, Serializable  

 

第二,线程安全性不同。

Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,但使用HashMap时就必须要自己增加同步处理。

 

第三,是否提供contains方法

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。

Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

第四,key和value是否允许null值。

其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。

Hashtable中,key和value都不允许出现null值。

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

第五,两个遍历方式的内部实现上不同。

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

第六,hash值不同。

哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

第七,内部实现使用的数组初

转载于:https://www.cnblogs.com/HelloGuang/p/3612920.html

你可能感兴趣的文章
管道编程之pipe
查看>>
网络编程--C/S日期查询例子
查看>>
IPC机制---共享内存编程
查看>>
使用inotify进行文件事件通知
查看>>
Linux中时间函数的应用接口
查看>>
DNS解析过程详解
查看>>
牛奶可乐经济学---阅读总结
查看>>
求最长子序列和
查看>>
计算最大公因数的欧几里德算法
查看>>
在驱动程序中改变进程状态并调用schedule()
查看>>
C语言中的-------结构
查看>>
栈的应用---平衡符号
查看>>
用栈计算逆波兰式
查看>>
利用数组栈将中缀表达式转换成后缀表达式
查看>>
SpringBoot + Mybatis-plus实战之Mybatis-plus的一级缓存、二级缓存
查看>>
Java 字符串型的日期对比大小
查看>>
Java常见异常类型
查看>>
aviator 实现 List 的求和、排序、最大、最小值
查看>>
android内存碎片问题优化梳理
查看>>
android相机场景下整机内存分析
查看>>