HashSet:实现了Set接口,它不允许集合中出现重复的元素。在将对象存储在HashSet之前,要确保重写了hashCode()和eauqls()方法,这样做的目的是比较对象的值是否相等,从而确保集合中没有存储相同的对象。如果不重写上述两个方法,那么将使用public boolean add(Object obj)方法默认实现,在Set中添加元素时,如果元素重复时返回"false",如果添加成功则返回"true"。
HashMap:实现了Map接口,Map接口对键值对进行映射。Map中不允许出现重复的键(Key),但是可以出现重复的值(Value)。HashMap不能保存对象的排列次序,并且可以有空的键值对(键和值同时为空,但至多只能有一个空的键)。HashMap是非线程安全的,也不是同步的(非Synchronize),要想实现线程安全,需要调用collections类的静态方法synchronizeMap()实现。
HashSet | HashMap |
---|---|
实现Set接口 | 实现Map接口 |
存储对象 | 存储键值对 |
调用add()方法向Set中添加元素 | 调用put()向Map中添加元素 |
HashSet使用成员对象来计算HashCode 值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false | HashMap使用键(Key)计算HashCode |
HashSet较HashMap来说较慢 | HashMap相对于HashSet较快,因为它是使用唯一的键获取对象 |