HashMap和HashSet

目录

1、模型

2、常用方法

(1) HashMap

(2)HashSet

3、HashMap和HashSet最大的区别


1、模型

我们一般把搜索的数据称为关键字(key),和关键字对应的称为值(value):

(1) 纯key模型:

比如,快速查找某个人的名字是否存在于通讯录中,这个人的名字就是关键字key.

(2) key-value模型:

比如,统计一段话中,每种标点符号出现了多少次,其中,每个标点符号就是关键字key,它所出现的次数就是对应的值value.

HashMap就是key-value模型。

HashSet中只存储了key。

2、常用方法

(1) HashMap

HashMap和HashSet_第1张图片

关于Map.Entry的说明:

查看Map接口的原码可以发现,Entry是其内部的一个接口,

HashMap和HashSet_第2张图片

 HashMap既然实现了Map接口,那它也必然实现了Entry接口,

HashMap和HashSet_第3张图片

可以看到,在HashMap的内部类Node中实现了Entry接口,该内部类主要提供了key,value的获取以及设置value的方法,但是并没有设置key的方法.

注意:

(1) HashMap中存放键值对的key是唯一的,value是可以重复的.

(2) HashMap中的key可以全部分离出来,存储到Set中来访问(因为key不能重复),即keySet()方法.

HashMap和HashSet_第4张图片

(HashMap中的key并没有进行排序,上图代码中打印的结果是所有的key在哈希表中存放的顺序)

(3) HashMap中的value也可以全部分离出来,存储在Collection中(value可能有重复),即 values()方法.

HashMap和HashSet_第5张图片

(HashMap中的value也没有进行排序,value的顺序和key的存放顺序有关)

(4) HashMap中的key不能直接修改,如果要修改key,需要把key先删除再重新插入,value可以直接修改.

(5) entrySet()方法的使用:

HashMap和HashSet_第6张图片

entrySet()方法就是把HashMap中的每个键值对打包成一个整体,然后放入到一个集合中: 

HashMap和HashSet_第7张图片

(2)HashSet

HashMap和HashSet_第8张图片

注意:

(1) HashSet中只存储了key,并且key不会重复,使用HashSet可以达到去重的效果。因为HashSet的底层是HashMap:

查看HashSet源码时,可以发现它的每个构造方法都会初始化一个HashMap:

HashMap和HashSet_第9张图片

HashMap和HashSet_第10张图片

LinkedHashMap是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序,本质上还是个HashMap。

而HashSet底层HashMap的每个value都是一个空的Object类型的对象:

HashMap和HashSet_第11张图片

(2) HashSet中的key不能修改,如果要修改,需要先删除再重新插入.

(3) HashMap和HashSet的key和value都可以存放null.

HashMap和HashSet_第12张图片

3、HashMap和HashSet最大的区别

二者最大的区别就在于,HashSet是继承自Collection的接口类,Set中只存储key。

HashMap是继承于Map接口,存储的是key-value键值对。

HashMap和HashSet_第13张图片

 

 

你可能感兴趣的:(java)