zoukankan      html  css  js  c++  java
  • 浅析HashMap和Hashtable的区别

    HashMap和Hashtable两个类都实现了Map接口,二者保存键值对(key-value对);

    HashMapHashTable区别

    第一,继承的父类不同。
    HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类,HashMap是Hashtable的轻量级实现(非线程安全的实现),二者都实现了Map接口。

    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 {}

    第二,线程安全性不同。
    HashMap中的方法是非同步的,而Hashtable 中的方法是同步的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,为了使线程安全我们使用HashMap时就必须要自己增加同步处理。HashMap的同步问题可通过Collections的一个静态方法得到解决:
    Map Collections.synchronizedMap(Map m)
    这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。 
    由于HashMap是线程不同步(线程不安全)的,所以效率要高于HashTable. 

    第三,是否提供contains方法
    HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。

    Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

    第四,key和value是否允许null值。
    其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。
    Hashtable中,key和value都不允许出现null值。
    HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

  • 相关阅读:
    PHP开发者必须养成的十大优良习惯
    Centos7下编译安装PHP
    linux 强制删除yum安装的php7.2
    php和go的web性通对比
    最好的编程语言及其它
    管理哲学新解
    继甲骨文裁员、Java服软Python后,国产原创IT技术已经成熟,让中国科技不再受制于人!
    雷军:我是个失败的创业者,因为我是劳模
    当95后进入大厂
    如何避免自high式分享
  • 原文地址:https://www.cnblogs.com/kevinZhu/p/7084637.html
Copyright © 2011-2022 走看看