HashTable是什么?哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。

HashMap是什么? 看另外一篇文章。

HashMap和HashTable的主要6个区别:

  1. HashMap是非线程同步的,HashTable是线程同步的。
  2. HashMap允许null作为键或者值,HashTable不允许
  3. HashTable中有个一个contains方法,HashMap去掉了此方法
  4. 效率上来讲,HashMap因为是非线程安全的,因此效率比HashTable高
  5. hashTable继承Dictionary,而HashMap继承Abstract
public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, java.io.Serializable

6.hashTable的put方法实现了同步,而hashMap没有

hashMap的put、get方法源码:

public V put(K key, V value) {if (key == null)return putForNullKey(value);int hash = hash(key.hashCode());int i = indexFor(hash, table.length);for (Entry<K,V> e = table[i]; e != null; e = e.next) {Object k;if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;e.recordAccess(this);return oldValue;}}modCount++;addEntry(hash, key, value, i);return null;}
public V get(Object key) {if (key == null)return getForNullKey();int hash = hash(key.hashCode());for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {Object k;if (e.hash == hash && ((k = e.key) == key || key.equals(k)))return e.value;}return null;}

hashTable的put()、get()方法源码:

public synchronized V put(K key, V value) {// Make sure the value is not nullif (value == null) {throw new NullPointerException();}// Makes sure the key is not already in the hashtable.Entry tab[] = table;int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {if ((e.hash == hash) && e.key.equals(key)) {V old = e.value;e.value = value;return old;}}modCount++;if (count >= threshold) {// Rehash the table if the threshold is exceededrehash();tab = table;index = (hash & 0x7FFFFFFF) % tab.length;}// Creates the new entry.Entry<K,V> e = tab[index];tab[index] = new Entry<K,V>(hash, key, value, e);count++;return null;}
public synchronized V get(Object key) {Entry tab[] = table;int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {if ((e.hash == hash) && e.key.equals(key)) {return e.value;}}return null;}

从源码中可以看出hashTable实现了synchronized,并不允许null作为键值。

资料来源:http://my.oschina.net/mrku/blog/737808

什么是HashTable?HashMap和HashTable的区别相关推荐

  1. 浅谈HashTable, HashMap, ConcurrentHashMap 之间的区别

           大家好,今天为大家带来新的知识,  HashTable, HashMap, ConcurrentHashMap 之间的区别                                ...

  2. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

  3. HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!

    HashMap 和 Hashtable 是 Java 开发程序员必须要掌握的,也是在各种 Java 面试场合中必须会问到的. 但你对这两者的区别了解有多少呢? 现在,栈长我给大家总结一下,或许有你不明 ...

  4. 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...

  5. HashMap、HashTable、ConcurrentHashMap、HashSet区别 线程安全类

    HashMap专题:HashMap的实现原理--链表散列 HashTable专题:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 Hash,Tree数据结构时 ...

  6. 一文读懂JDK7,8,JD9的HashMap,HashTable,ConcurrentHashMap及他们的区别

    内容和标题一样长哦,人家写了好久的.如无特别指明,内容对应的源码是jdk1.7(后面会和1.8对比) 1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希 ...

  7. HashMap 和 HashTable 区别

    来源:http://www.importnew.com/7010.html HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚 ...

  8. ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别

    一.ArrayList 和 LinkedList区别: (1)两者都是线程不安全,都实现了Collection接口. (2)数据结构:ArrayList是基于动态数组的数据结构,LinkedList是 ...

  9. HashMap和Hashtable的区别 2

    导读: 1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null k ...

  10. HashMap与HashTable联系与区别

    HashMap与HashTable 1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法. 2.hashTabl ...

最新文章

  1. snap安装指定版本的软件
  2. mysql自定义排序以及优化like模糊查询
  3. AI(4)---AI+IOT=?
  4. 推荐:免费万能视音频转换软件--格式工厂
  5. 我对敏捷价值观和原则的理解 --待续
  6. js 表格动态增加行通用函数
  7. Latex绘制三线表
  8. mac电脑循环次数多少算新_在Mac上处理不同事务,这些软件必不可少,个个精品...
  9. 计算机桌面文字重影,电脑桌面字有重影怎么办
  10. ceph 代码分析 读_Ceph代码分析
  11. 打印网页去掉页眉和页脚
  12. pdf文件在线预览,兼容多浏览器和手机端
  13. 你算过这笔账么?月薪5000在中国和美国的生活各是怎样?
  14. 机器学习、深度学习面试知识点汇总
  15. 爬虫之获取各大网站热搜并实现语音播报
  16. 有赞商城如何对接ERP、CRM系统?
  17. android data 加密默认关闭
  18. 北京理工大学计算机考研调剂,2019年北京理工大学考研调剂相关规定
  19. 关于网站架构设计的知识
  20. WP-南邮CTF逆向第六题 WxyVM2

热门文章

  1. Insomnia的下载
  2. 时钟周期、机器周期、总线周期、指令周期的关系
  3. 数据库内外联接查询语句
  4. 多云管理平台解决方案
  5. C语言中system函数用法解释
  6. python堆栈溢出的原因_堆栈溢出一般是什么原因?
  7. vue vuex watch改变scrollTop
  8. BZOJ 2708 木偶
  9. 比如说,你下午四点钟来。那么从三点钟起,我就开始感到幸福。时间越临近,我就越感到幸福。到了四点钟的时候,我就会坐立不安:我就会发现幸福的代价。...
  10. AngularJS进阶(四十)创建模块、服务