HashMap和HashTable的区别

简介: HashMap和HashTable的区别

集合是我们在日常开发中常用到的,但是在什么时候具体使用哪个集合类,就是要较熟练的了解其中的区别了,再深入一些,那就是其的底层实现的实现之类的。

今天我们就来学习一个HashMap和HashTable的区别。


父类


两者实现的接口一致,都是实现了Map接口,继承的父类不同。

HashMap继承自AbstractMap类。

HashTable继承自Dictionary类,Dictionary类目前已经被废弃的类。


线程是否安全


HashMap线程不安全,HashTable线程安全,因此在多线程场景下,就不能使用HashMap了,不然就会出现哈希冲突问题啦,也是HashMap的底层结构导致的这种问题。


包含的contains方法不同


对于contains方法,其实HashMap是没有contains方法的,但是HashMap包括containsValue和containsKey方法;

HashTable则保留了contains方法,效果和containsValue相同,HashTable也存在containsValue和containsKey方法。


是否允许null值


HashMap是允许key和value为null值,具体实现时通过containsValue和containsKey方法来判断是否存在对应的键值对。

而HashTable是不允许存在null值的。


计算hash值方式不同


扩容方式不同


当容量不足时要进行扩容时,这时候会调用内部方法resize()方法,其中会进行对应的扩容。

HashMap规定扩容时要扩容成当前容量总和的两倍,包括刚生成的对象也是会按照2的幂次倍进行初始扩容。

HashTable略有不同,它的扩容机制是乘以2,然后加1。


解决Hash冲突的方式不同


HashMap的处理方式在JDK7和JDK8版本中存在不同的情况,之后我们详细学习。

HashTable中的哈希冲突,均是以链表方式存储。

注意:HashTable在JDK中已经不推荐使用了,如果想用线程安全的HashMap,那就用CocurrentHashMap吧。


相关文章
|
12月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
209 3
|
安全
HashTable与HashMap的区别
(1)HashTable的每个方法都用synchronized修饰,因此是线程安全的,但同时读写效率很低 (2)HashTable的Key不允许为null (3)HashTable只对key进行一次hash,HashMap进行了两次Hash (4)HashTable底层使用的数组加链表HashTable与HashMap的区别
229 2
|
存储 开发者
HashMap和Hashtable的key和value可以为null吗,ConcurrentHashMap呢
HashMap的key可以为null,value也可以为null;Hashtable的key不允许为null,value也不能为null;ConcurrentHashMap的key不允许为null
|
12月前
|
存储 安全 Java
如何优雅地回答HashSet与HashMap的区别?看这里!
哈喽,大家好!我是小米,29岁程序员。本文聚焦Java开发中经典的面试题——HashSet和HashMap的区别。HashSet基于HashMap实现,存储唯一值;HashMap存储键值对。两者在数据结构、使用场景、操作方法等方面有显著差异。HashSet无序且依赖元素的hashCode和equals方法保证唯一性,而HashMap需注意线程安全问题。掌握这些知识点,助你轻松应对面试。更多技术干货,欢迎关注我的微信公众号“软件求生”。
371 4
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
219 1
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
165 1
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。
|
安全 Java
【Java集合类面试十五】、说一说HashMap和HashTable的区别
HashMap和Hashtable的主要区别在于Hashtable是线程安全的,不允许null键和值,而HashMap是非线程安全的,允许null键和值。
|
安全 Java
【Java集合类面试十六】、HashMap与ConcurrentHashMap有什么区别?
HashMap是非线程安全的,而ConcurrentHashMap通过减少锁粒度来提高并发性能,检索操作无需锁,从而提供更好的线程安全性和性能。