美文网首页
HashMap、HashTable、HashSet区别

HashMap、HashTable、HashSet区别

作者: 英文名叫夏天 | 来源:发表于2018-12-26 16:21 被阅读0次

    HashMap和Hashtable的区别

    都实现了Map接口,差别在于速度、线程安全和同步性
    1、HashMap是非synchronized的,可以接受为null的键值(key)和值(value); HashTable 是synchronized的,不能接收null
    2、HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable,如果没有正确的同步的话,多个线程不能共享HashMap。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
    3、另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为
    4、HashMap不能保证随着时间的推移Map中的元素次序是不变的。

    让HashMap同步的方法

    1. Collections.synchronizeMap(hashMap);
    2. 使用ConcurrentHashMap

    HashMap和HashSet的区别

    1.HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true

    相关文章

      网友评论

          本文标题:HashMap、HashTable、HashSet区别

          本文链接:https://www.haomeiwen.com/subject/dhnhlqtx.html