HashSet实现了Set接口,它不允许集合中出现重复元素。
对于HashSet而言,它是基于HashMap实现的,底层采用HashMap来保存元素,而且只使用了HashMap的key来实现各种特性。相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,我们应该为保存到HashSet中的对象覆盖hashCode()和equals(),以保证放入的对象的唯一性。
HashSet较HashMap来说比较慢
HashSet中的数据不是key-value键值对,其只是单值,虽然其借助与HashMap来实现,但是其只是将值作为key来存入HashMap中,因为HashMap中的值是key-value键值对的,所以每个HashSet存储到HashMap的数据对应的value值只是一个new Object()对象。
HashSet源码:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
private transient HashMap<E,Object> map;
public HashSet() {
map = new HashMap<>();
}