【java】HashSet与HashMap的区别

博客围绕HashSet展开,指出在将对象存储于HashSet前,需重写hashCode()和equals()方法,以比较对象值是否相等,避免集合中存储相同对象。还提到Set添加元素的add方法,元素值重复时返回 'false',添加成功返回 'true'。

区别

HashSet

HashMap

接口实现Set接口实现Map接口
存储存储对象存储键值对
底层原理

基于HashMap(注释①)

数组+链表

调用方法

使用add()方法将元素放入Set中

public boolean add(Object obj)

使用put()方法将元素放入Map中

public Object put(Object Key,Object value)

hashcode

使用成员对象来计算hashcode值

(注释②)

使用键对象来计算hashcode值
速度相对慢较快,因为使用唯一的键来获取对象
重复性不能包含重复数据。Set接口是一种一个不包含重复元素的collection键值不能重复
框架collectioncollection

注释①:collection

HashSet的源码:

//HashSet底层用来存储元素的结构,实际上使用HashMap来存储
private transient HashMap<E,Object> map;
 
//HashMap中的value值,HashSet只关注key值,所以所有的value值都为Object对象
private static final Object PRESENT = new Object();
 
 
//HashSet的无参构造,直接创建了一个HashMap对象
public HashSet() {
        map = new HashMap<>();
}
 

注释②:

当我们提到HashSet时,第一件事就是在将对象存储在HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有

储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现:

public boolean add(Object obj)方法用在Set添加元素时,如果元素值重复时返回 "false",如果添加成功则返回"true"

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值