Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;因为HashMap put在判断key值时,如果为null,则返回new object(),而hashtable抛出异常。当get(key)方法,key如果为null,则通过new object().hashcode()进行查询。返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。 因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
4.初始化过程,Hashtable的初始化为11.hashMap的初始化为16.同时有一个加载因子,0.75.初始化时,以容量*0.75进行初始化。如果超出这个数值,Hashtable是以 初始容量*2+1扩容。hashMap则以初始容量*2扩容。
5.put的方法时,Hashtable是取模运算,而hashMap是采用2的幂次方加上与达到取模运算的效果,提高了性能。
6.两者检测是否含有key时,hash算法不一致,HashMap内部需要将key的hash码重新计算一边再检测,而 Hashtable则直接利用key本身的hash码来做验证。
分享到:
相关推荐
4. HashMap与Hashtable的区别? 答:HashMap非线程安全,而Hashtable是线程安全的;HashMap允许null键值,Hashtable不允;HashMap迭代器在修改时不会抛出ConcurrentModificationException,而Hashtable会。 5. ...
- HashMap和Hashtable的区别? - HashMap与HashSet的关系? - 如何解决哈希冲突? - 如何自定义键的哈希码生成方式? - 如何避免和处理HashMap中的循环链表? 通过深入学习和理解这些知识点,你将能够在面试中自信...
在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...
9. **HashMap与HashTable的区别**:HashTable是早期的线程安全版本,但它不允许null键和值,且性能较低,已经被ConcurrentHashMap所取代。 10. **面试常见问题**:面试中常问的问题包括HashMap的扩容机制、哈希冲突...
1、**HashMap 和 Hashtable 的区别和联系** HashMap 和 Hashtable 都是Java中的键值对存储结构,它们底层都基于哈希表实现。主要差异在于: - **线程安全性**:Hashtable 是线程安全的,因为它的所有方法都使用了 ...
4. **HashMap和Hashtable的区别** - **HashMap** 非线程安全,允许null键和null值,适合单线程环境。 - **Hashtable** 线程安全,不允许null键和null值,适合多线程环境。 5. **ConcurrentHashMap和Hashtable的...
然而,HashMap与HashTable的主要区别在于线程安全性:HashTable是线程安全的,而HashMap则不是。 JDK1.8之后,HashMap进行了性能优化,引入了红黑树的数据结构。当链表的长度超过一个阈值(默认为8)时,HashMap会...
这里我们根据提供的部分内容,深入解析一些常见的Java基础知识和面试重点。 首先,我们要了解Java中的访问修饰符,包括public、private、protected和默认(friendly)。它们分别决定了类、接口、变量和方法的可见性...
- HashMap与Hashtable的区别:HashMap是非线程安全的,而Hashtable是线程安全的;HashMap允许null键值对,但不推荐;HashMap的初始容量是16,而Hashtable是11;HashMap扩容是2倍,Hashtable是2倍+1;HashMap和...
2. **ArrayList与Vector的区别,HashMap与Hashtable的区别**: - **ArrayList与Vector**: - 同步性:Vector是线程安全的,ArrayList不是。 - 扩容策略:Vector默认扩容为原来容量的两倍,ArrayList则是原来的...
本文将重点解析标题与描述中提及的一些关键知识点,包括final、finally、finalize的区别,以及HashMap与Hashtable、Collection与Collections、Overload与Override等概念的不同之处。 ### final、finally、finalize ...
本文将根据提供的部分内容,深入解析Java笔试题中的关键知识点,帮助读者巩固基础,提升技能。 1. **HashMap与HashTable的区别** - HashMap是非线程安全的实现,它是Hashtable的轻量级版本,效率相对较高。 - ...
常用的实现类有HashMap(无序,非线程安全)、LinkedHashMap(保持插入或访问顺序)、TreeMap(基于红黑树,键值对按特定顺序排列)和Hashtable(线程安全,但效率较低)。 2. **线程安全的集合**: - **线程不...
#### 八、HashMap与Hashtable、HashSet、TreeMap的区别 - **HashMap与Hashtable**: - `HashMap`非线程安全,而`Hashtable`线程安全。 - `HashMap`允许键和值为`null`,而`Hashtable`不允许。 - **HashMap与...
### 对Java中Map集合的深入解析 #### 一、Map集合概述 Map是Java集合框架中的一个重要组成部分,它提供了一种存储键值对(key-value pair)数据结构的方式。与List和Set不同,Map并没有直接继承自`Collection`接口,...
HashMap和HashTable的区别,HashTable线程安全吗? **HashMap vs HashTable:** - **线程安全性**:`HashTable`是线程安全的,而`HashMap`不是。 - **空键值支持**:`HashMap`允许使用`null`作为键和值,而`...
1. **允许null值**:HashMap允许键和值为null,而Hashtable则不允许。 2. **非线程安全**:HashMap不是线程安全的,这意味着在多线程环境中,如果不加额外的同步控制,可能会导致数据不一致。相反,Hashtable是线程...
5. **HashMap 和 Hashtable 的区别**: - `HashMap` 和 `Hashtable` 都实现了`Map`接口,但`HashMap`是非同步的,效率更高,允许`null`键和值。 - `Hashtable` 是同步的,因此适合多线程环境,但不支持`null`键和...
HashMap和Hashtable的主要区别在于线程安全性和null处理,HashMap提供了`synchronizedMap()`方法来创建线程安全的副本,以及`ConcurrentHashMap`作为线程安全的替代品。此外,HashMap的哈希算法在不同版本中有所优化...
5. **HashMap和Hashtable的区别**: - `HashMap` 不保证元素顺序,允许null键和值,是非同步的,性能较好。 - `Hashtable` 不允许null键和值,是同步的,因此在多线程环境下更安全,但性能相对较低。 - `HashMap`...