java 中 HashMap 和 Hashtable 之间的不同

关于 HashMap 和 Hashtable 之间的不同?网上有大批的网友在讨论,而在我看来,他们都没有Stackoverflow上一位网友总结的全面。因此在这里摘录一下,方面自己加深理解!

链表的存储结构

链表的存储结构

HashMap的存储结构

HashMap的存储结构

从上面的两张图中已能看出它们的不同。下面我们看看非多线程应用中使用哪个更有效率?

Java 中 HashMap 和 HashTable 的不同点

  1. Hashtable 是同步的,然而 HashMap不是。 这使得HashMap更适合非多线程应用,因为非同步对象通常执行效率优于同步对象。
  2. Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。
  3. HashMap的一个子类是LinkedHashMap。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。
  4. HashMap 和 HashTable 继承的类不一样

    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable
    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
    
  5. 同步机制不一样。HashMap没有提供同步机制,是线程不安全的,需要自己在外面写同步代码,HashTable 部分方法上有自己的 synchronize 同步,是线程安全的。
  6. HashMap中没有contains()方法。
  7. 它们的数组初始化大小和扩容方式不一样,HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 

因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看ConcurrentHashMap。

参考资料

  • http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html
  • http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html
  • http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
  • http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html
  • http://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable

java 中 HashMap 和 Hashtable 之间的不同

: » java 中 HashMap 和 Hashtable 之间的不同

原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/tech/java/251592.html

(0)
上一篇 2022年5月3日 06:37
下一篇 2022年5月3日 06:41

相关推荐

发表回复

登录后才能评论