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的扩容机制、哈希冲突...
最后,针对一些常见的面试问题进行了详细的解答,如 HashMap 和 Hashtable 的区别、ArrayList 和 LinkedList 的比较等。 适合人群:具备一定 Java 编程基础的研发人员,尤其是准备面试或希望深入了解 Java 集合框架...
1、**HashMap 和 Hashtable 的区别和联系** HashMap 和 Hashtable 都是Java中的键值对存储结构,它们底层都基于哈希表实现。主要差异在于: - **线程安全性**:Hashtable 是线程安全的,因为它的所有方法都使用了 ...
4. **HashMap和Hashtable的区别** - **HashMap** 非线程安全,允许null键和null值,适合单线程环境。 - **Hashtable** 线程安全,不允许null键和null值,适合多线程环境。 5. **ConcurrentHashMap和Hashtable的...
内容概要:本文详细探讨了Java并发环境下的ConcurrentHashMap与HashTable的关键差异,介绍了LinkedHashMap、HashMap及其与Set类家族成员的异同,并分析了诸如Collections.sort等重要工具方法的工作机制。此外,文档...
然而,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的轻量级版本,效率相对较高。 - ...
从基础的概念如集合框架简介、主要接口到具体的数据结构和容器实现(例如ArrayList、LinkedList),再到高级特性和应用场景,例如HashMap和Hashtable之间的异同点以及如何确保集合的不可修改。文中还讨论了许多线程...
此外,涉及到了文件输入输出的处理、线程的概念与实现、HashMap和Hashtable的区别、枚举类型的定义、单例模式的实现以及switch语句的工作原理。最后提到了Java 8的新特性之一——Lambda表达式的使用。每个问题都配有...
常用的实现类有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`作为键和值,而`...