• 浅析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()方法来判断。

  • 相关阅读:
    cloud-api-service和cloud-iopm-web提交merge方法
    Java知识点-判断null、空字符串和空格
    Windows本机搭建Redis
    api-gateway-engine知识点(2)
    能够提高开发效率的Eclipse实用操作
    IOP知识点(2)
    获取分辨率及dp/px换算
    Android软件自动更新(自定义处理,不使用第三方)
    友盟自动更新参数详解
    [Android]ping -c 1 -w 100 sina.cn的解析
  • 原文地址:https://www.cnblogs.com/kevinZhu/p/7084637.html
Copyright © 2020-2023  润新知