HashMap、HashTable、HashSet区别

2018-12-26  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读