Map和Set
Map和set是一种专门用来
进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。
Map和Set是一种适合
动态查找的集合容器。
1.模型
(搜索的数据称为关键字(Key),和关键字对应的称为值(Value)
)
1. 纯 key 模型
2. Key-Value 模型
Map中存储的就是
key-value的键值对,
Set中只存储了
Key
2.关于Map的介绍
2.1Map.Entry<K, V>
2.2Map的常用方法
![](https://i-blog.csdnimg.cn/blog_migrate/05b630d4049819052c451f5975e0c870.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c5df16fec1424bad5ba6bb71b60d1337.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b886c1c1d68a5f6e6cc74699fc673fb.png)
2.3Map的注意事项
1. Map是一个
接口类,没有继承自Collection,
不能直接实例化对象,如果
要实例化对象只能实例化其实现类TreeMap或者HashMap
2. Map中存放键值对的
Key是唯一的,value是可以重复的
3. 在Map中插入键值对时,
类TreeMap的key不能为空,否则就会抛NullPointerException异常,但是value可以为空;类HashMap的key和value都可为空
4. Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
5. Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
6. Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入。
7. TreeMap和HashMap的区别
![](https://i-blog.csdnimg.cn/blog_migrate/9dd8238d5f7129e837c199aa89ecf2f3.png)
hashmap存储元素的时候,不是按照存储顺序进行打印的,是根据哈希函数来存储的
![](https://i-blog.csdnimg.cn/blog_migrate/78ee15425aa8c5a7da7c10f17427525e.png)
3.关于Set的介绍
3.1Set的常用方法
![](https://i-blog.csdnimg.cn/blog_migrate/85344425a80a08c3adef79e212325f57.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8ce08f77d691701834505b29d24561a.png)
3.2Set的注意事项
1.Set是
继承自Collection的接口类
2.Set中只存储了key,并且要求
key一定要唯一
3.Set最大的功能就是
对集合中的元素进行去重
4.实现Set接口的
常用类有TreeSet和HashSet,还有一个LinkedHashSet
5.Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
6.Set中
不能插入null的key
7.TreeSet和HashSet的区别
![](https://i-blog.csdnimg.cn/blog_migrate/0864538d1e3f4cca5efe5676878c3085.png)
4.做题(练习题+面试题)
1.给定1w个数据,统计每个数据出现的次数
![](https://i-blog.csdnimg.cn/blog_migrate/b5a84eef24dd02276d617791e581a455.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2e3ba9dadeefd1e4a4dad4eba08c5cd5.png)
2.将1w个数据中的数据去重
![](https://i-blog.csdnimg.cn/blog_migrate/0f2c41e0f82a8aa6100df4ac80209cfd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2e3ba9dadeefd1e4a4dad4eba08c5cd5.png)