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

  • 相关阅读:
    黑客长期摇号不中"黑"掉北京小客车摇号网
    网络犯罪新动向:“黑客”学历不高 年龄不超30岁
    McAfee重返科技业 研制D-Central防政府监视
    windows系统服务编程代码示例分享
    Fireeye火眼公司发布报告,评论中国网络间谍活动
    FBI是如何破获“美国少女”裸照勒索案的
    得到内网域管理员的5种常见方法
    别人在用你的什么技术在赚钱.其实你天天在做
    慢一点恋爱,别急着洞房
    元芳,关于向朋友借钱你怎么看
  • 原文地址:https://www.cnblogs.com/kevinZhu/p/7084637.html
Copyright © 2020-2023  润新知