public class Hashtable  extends Dictionary  implements Map, Cloneable, <a href="http://lib.csdn.net/base/javase" class='replace_word' title="Java SE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.Serializable  

http://blog.csdn.net/shohokuf/article/details/3932967

public class HashMap  extends AbstractMap  implements Map, Cloneable, Serializable  

可见Hashtable 继承自 Dictiionary 而 HashMap继承自AbstractMap

Hashtable的put方法如下

 1 public synchronized V put(K key, V value) {  //###### 注意这里1
 2   // Make sure the value is not null
 3   if (value == null) { //###### 注意这里 2
 4     throw new NullPointerException();
 5   }
 6   // Makes sure the key is not already in the hashtable.
 7   Entry tab[] = table;
 8   int hash = key.hashCode(); //###### 注意这里 3
 9   int index = (hash & 0x7FFFFFFF) % tab.length;
10   for (Entry e = tab[index]; e != null; e = e.next) {
11     if ((e.hash == hash) && e.key.equals(key)) {
12       V old = e.value;
13       e.value = value;
14       return old;
15     }
16   }
17   modCount++;
18   if (count >= threshold) {
19     // Rehash the table if the threshold is exceeded
20     rehash();
21     tab = table;
22     index = (hash & 0x7FFFFFFF) % tab.length;
23   }
24   // Creates the new entry.
25   Entry e = tab[index];
26   tab[index] = new Entry(hash, key, value, e);
27   count++;
28   return null;
29 }  

注意1 方法是同步的
注意2 方法不允许value==null
注意3 方法调用了key的hashCode方法,如果key==null,会抛出空指针异常 HashMap的put方法如下

 1 public V put(K key, V value) { //###### 注意这里 1
 2   if (key == null)  //###### 注意这里 2
 3     return putForNullKey(value);
 4   int hash = hash(key.hashCode());
 5   int i = indexFor(hash, table.length);
 6   for (Entry e = table[i]; e != null; e = e.next) {
 7     Object k;
 8     if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
 9       V oldValue = e.value;
10       e.value = value;
11       e.recordAccess(this);
12       return oldValue;
13     }
14   }
15   modCount++;
16   addEntry(hash, key, value, i);  //###### 注意这里
17   return null;
18 }  

注意1 方法是非同步的
注意2 方法允许key==null
注意3 方法并没有对value进行任何调用,所以允许为null

补充: 
Hashtable 有一个 contains方法,容易引起误会,所以在HashMap里面已经去掉了
当然,2个类都用containsKey和containsValue方法。

                  HashMap                Hashtable

父类                  AbstractMap          Dictiionary

是否同步            否                            是

k,v可否null     是                            否

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,

主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

转载于:https://www.cnblogs.com/manhuidhu/p/6542388.html

转HashMap Hashtable区别相关推荐

  1. HashMap Hashtable区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.HashMap基础自AbstractMap,Hashtable继承自Dictionary   public class H ...

  2. HashMap Hashtable区别

    •HashMap 和 Hashtable 是 Map 接口的两个典型实现类 •区别:      –Hashtable 是一个古老的 Map 实现类,不建议使用      –Hashtable 是一个线 ...

  3. 一个古老的问题HashMap与Hashtable区别

    HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable.可能你觉得HashTable很好用,为什么不用呢? ...

  4. HashTable和HashMap的区别详解

    HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...

  5. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    Hash算法 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的 ...

  6. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  7. Hashtable、HashMap 与 HashTable区别、HashMap、Hashtable和TreeMap、 LinkedHashMap

    目录 Hashtable的函数都是同步的 HashMap 与 HashTable区别 HashMap.Hashtable和TreeMap LinkedHashMap 特殊新增的构造器 TreeMap ...

  8. HashTable和HashMap的区别

    转载: http://www.importnew.com/24822.html 1.时间 2. 作者 以下是HashTable的作者: 1 2 3 4 5 以下代码及注释来自java.util.Has ...

  9. 036_Hashtable和HashMap的区别

    1. Hashtable和HashMap的区别 1.1. Hashtable线程安全, 效率低; HashMap线程不安全, 效率高 1.2. Hashtable父类是Dictionary; Hash ...

  10. hashmap删除指定key_HashTable和HashMap的区别详解

    一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的, ...

最新文章

  1. 俄罗斯无人机公司Hoversrf紧随Volocopter步伐,酷炫“方程式”飞行汽车来袭
  2. 【网络信息安全】授权与访问控制
  3. 服务器电源输出电压稳定,服务器电源选购指南
  4. ASP.NET 取得 Request URL 的各个部分
  5. 大麦无线虚拟服务器,解答大麦盒子无线设置的问题
  6. Springcloud电子商城系统 java B2B2C-服务消费者(rest+ribbon)
  7. 短视频直播怎么搭建_直播平台搭建流程
  8. 三角波c语言编程,51单片机简易波形发生器(正弦波 锯齿波 三角波)仿真+源程序+电路原理图...
  9. 怎么让照片里的人嘴巴动起来_让照片动起来软件下载-让照片动起来制作软件下载-西西软件下载...
  10. Windows服务器应该如何保持长时间连接不断开。
  11. 对自己的反思 (闲暇中的面试总结)
  12. 获取海康摄像机/录像机rtsp视频流地址格式
  13. Java的7大设计原则和23种设计模式
  14. 中国象棋对局软件设计(一)
  15. 【华为机试真题Python】工厂流水线调度
  16. 创造与魔法241服务器系统什么时候修好,《创造与魔法》萌新小课堂——如何选择服务器...
  17. Arduino Ethernet构建简易服务器
  18. 必看!SQL语法速成手册
  19. 求101-150的质数
  20. java中兴参与实参的区别_深入剖析中兴a7s和中兴a7有啥区别?哪个好?真实体验诉说...

热门文章

  1. 编译WINDOWS版FFmpeg:msys2环境准备
  2. LINUX下载编译libpng
  3. 解决办法:configure: error: You requested SRTP (requires libsrtp) but not found...die
  4. memcpy-avx-unaligned/strcpy_sse2_unaligned崩溃记录
  5. LINUX上ZIP的使用
  6. EasyUI配置当点击一个datagrid的checkbox选中或取消选中记录的时候刷新另一个datagrid数据的方法
  7. python导入mysql慢_如何更高、更快、更强地用python向mysql导入数据
  8. python 打印三维数据_Python中的面向对象编程(二):数据隐藏和对象打印
  9. 新手linux版本,六款适用于新手的非Ubuntu Linux发行版
  10. BOOST库介绍(八)——deadline_timer