HashMap与HashTable的区别

首先,从JDK源码来看,HashMap和HashTable都实现了Map接口:

可以看出,HashTable是从JDK1.0就有的,HashMap而是从JDK1.2才有的。

二者实现的接口一致。

因此,对外方法API也基本一致:

内部存储方式也基本一致,都是邻接表形式:

基本操作也基本一致,以put方法为例,都是先算Key的hashCode,然后以【hashCode%数组长度】求出放在数组中的索引位置,如果此位置已经有Entry,则把当前Entry插入到此链表的头结点,如果此位置为空,则把Entry直接放到该位置。

总而言之,二者所有的操作基本都一致,只有一点不同,就是HashTable的每个方法都是线程同步的,都加了synchronized修饰符,而HashMap不是。因此HashMap在被多线程共享操作时,会有多线程的问题,最严重的问题是会死循环,具体见下篇文章。

时间: 2024-07-31 17:01:01

HashMap与HashTable的区别的相关文章

ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?

ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长:ArrayList每次增长为原来的50%;Vector每次增长为原来的100%; (从内部实现机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当向集合中添加对象时,如果内部数组长度不够用时,长度会自动增长.ArrayList会增长为原来的1.5倍,Vecto

Map...---HashMap和Hashtable的区别-----...LinkedHashMap

*Map接口不是Collection接口的子接口 *Map存放数据的方式采用键值对的方式,类似与生活中目录(键)和内容(值) *常见的实现类: * HashMap**:采用键-值对的方式进行存放. * 键(键的集合是就是set集合):唯一,无序,如果键重复,将发生覆盖 * 值:无序 不唯一(Collection) * 构造函数: * HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap. * HashMap(int initialCapaci

[转]HashMap与HashTable的区别、HashMap与HashSet的关系

转自: http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable.可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别. 一:HashMap与HashTable的区别 1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以

深入集合类系列——HashMap和HashTable的区别

含义:HashMap是基于哈希表的Map接口的非同步实现.允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 数据结构:HashMap实际上是一个"链表散列"的数据结构,即数组和链表的结合体. HashMap存数据的基本流程: 1.当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode(); 2.再把hash通过一下运算得到一个int h. hash ^= (hash >>&g

HashMap和Hashtable的区别 源码分析

一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable是安全的. 二.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable public class HashM

从Java源码的角度来分析HashMap与HashTable的区别

由于HashMap与HashTable都是用来存储Key-Value的键值对,所以经常拿来对比二者的区别,下面就从源码的角度来分析一下HashMap与HashTable的区别, 首先介绍一下两者的区别,然后再从源码分析. HahMap与HahTable两者主要区别: 1.继承的父类不同 <span style="font-size:18px;">public class HashMap<K, V> extends AbstractMap<K, V>

java面试题——HashMap和Hashtable 的区别

一.HashMap 和Hashtable 的区别 我们先看2个类的定义 1 public class Hashtable 2 extends Dictionary 3 implements Map, Cloneable, java.io.Serializable public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 可见Hashtable 继承自 Dictiionary 而 HashMap

HashMap与HashTable的区别、HashMap与HashSet的关系

http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable.可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别. 一:HashMap与HashTable的区别 1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程

Java 集合系列 11 hashmap 和 hashtable 的区别

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

java 的HashMap和HashTable的区别?

1.HashMap和HashTable的区别? HashMap不是线程安全的它的操作方法没有进行同步处理 HashMap允许key为空 HashTable是线程安全的它的操作方法加以了synchronized修饰 HashTable不允许Key为空 2.ArrayList和LinkedList和Vector的区别? ArrayList内部实现是一个object数组,非线程安全 LinkedList内部实现是一个链表结构,非线程安全 Vector内部实现是一个object数组,线程安全 原文地址: