欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【java】HashSet与HashMap的区别

程序员文章站 2022-07-03 20:01:41
区别HashSetHashMap接口实现Set接口实现Map接口存储存储对象存储键值对底层原理基于HashMap(注释①)数组+链表调用方法使用add()方法将元素放入Set中public boolean add(Object obj)使用put()方法将元素放入Map中p......

区别

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 键值不能重复
框架 collection collection

注释①: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"

 

本文地址:https://blog.csdn.net/sarah25/article/details/110430849