目录
1、模型
我们一般把搜索的数据称为关键字(key),和关键字对应的称为值(value):
(1) 纯key模型:
比如,快速查找某个人的名字是否存在于通讯录中,这个人的名字就是关键字key.
(2) key-value模型:
比如,统计一段话中,每种标点符号出现了多少次,其中,每个标点符号就是关键字key,它所出现的次数就是对应的值value.
HashMap就是key-value模型。
HashSet中只存储了key。
2、常用方法
(1) HashMap

关于Map.Entry<K,V>的说明:
查看Map接口的原码可以发现,Entry是其内部的一个接口,

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

可以看到,在HashMap的内部类Node中实现了Entry接口,该内部类主要提供了key,value的获取以及设置value的方法,但是并没有设置key的方法.
注意:
(1) HashMap中存放键值对的key是唯一的,value是可以重复的.
(2) HashMap中的key可以全部分离出来,存储到Set中来访问(因为key不能重复),即keySet()方法.

(HashMap中的key并没有进行排序,上图代码中打印的结果是所有的key在哈希表中存放的顺序)
(3) HashMap中的value也可以全部分离出来,存储在Collection中(value可能有重复),即 values()方法.

(HashMap中的value也没有进行排序,value的顺序和key的存放顺序有关)
(4) HashMap中的key不能直接修改,如果要修改key,需要把key先删除再重新插入,value可以直接修改.
(5) entrySet()方法的使用:

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

(2)HashSet

注意:
(1) HashSet中只存储了key,并且key不会重复,使用HashSet可以达到去重的效果。因为HashSet的底层是HashMap:
查看HashSet源码时,可以发现它的每个构造方法都会初始化一个HashMap:


LinkedHashMap是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序,本质上还是个HashMap。
而HashSet底层HashMap的每个value都是一个空的Object类型的对象:

(2) HashSet中的key不能修改,如果要修改,需要先删除再重新插入.
(3) HashMap和HashSet的key和value都可以存放null.

3、HashMap和HashSet最大的区别
二者最大的区别就在于,HashSet是继承自Collection的接口类,Set中只存储key。
HashMap是继承于Map接口,存储的是key-value键值对。
