java 中 HashMap 和 Hashtable 之间的不同

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

更多精彩内容请看 web前端中文站
www.lisa33xiaoq.net 可按Ctrl + D 进行收藏

链表的存储结构

java 中 HashMap 和 Hashtable 之间的不同

HashMap的存储结构

java 中 HashMap 和 Hashtable 之间的不同

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

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
0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到