-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-04-26:请说一下HashMap与HashTable的区别? #39
Comments
1.hashMap是线程不安全的,hashTable是线程安全的。 |
1、HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value),而HashTable则不行。 |
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java集合框架中的一部分。Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合框架面试题中最常被考的问题,所以在参加任何Java面试之前,都不要忘了准备这一题。
第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 public class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable, Serializable {...} public abstract class AbstractMap<K, V> implements Map<K, V> {...}
|
回答的问题有些晚,但依然希望能抛砖引玉 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 继承的父类不同HashMap和Hashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口 特点及优缺点比较:
内部实现与操作问题HashTable
HashMap
HashMap的初始值还要考虑加载因子:
HashMap和HashTable都是用hash算法来决定其元素的存储,因此HashMap和Hashtable的hash表包含如下属性:
除此之外,hash表里还有一个“负载极限”,“负载极限”是一个0~1的数值,“负载极限”决定了hash表的最大填满程度。当hash表中的负载因子达到指定的“负载极限”时,hash表会自动成倍地增加容量(桶的数量),并将原有的对象重新分配,放入新的桶内,这称为rehashing。 HashMap和Hashtable的构造器允许指定一个负载极限,HashMap和Hashtable默认的“负载极限”为0.75,这表明当该hash表的3/4已经被填满时,hash表会发生rehashing。 “负载极限”的默认值(0.75)是时间和空间成本上的一种折中:
结论Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap。 |
1.HashMap和Hashtable都实现了map接口。 |
|
HashTable 同步 ,不支持null 键 和 值,由于同步导致性能开销,所以不推荐使用 |
知其然知其所以然补充一点: 大家都提到了 你有没有发现,只要是用于多线程场景的 Map, 回答这个问题前,我们先来思考下: 假设你在使用 你肯定说,这好办,我调用一下 那如果是 所以总结一下,用于多线程场景的 Map 不允许 null,是为了避免二义性。 |
HashMap:This implementation provides all of the optional map operations, and permits null values and the null key. (The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.) |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
No description provided.
The text was updated successfully, but these errors were encountered: