赞
踩
目录
Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的 搜索方式有:
1.直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢
2. 二分查找,时间复杂度为 ,但搜索前必须要求序列是有序的
上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:
1. 根据姓名查询考试成绩
2. 通讯录,即根据姓名查询联系方式
3. 不重复集合,即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,而Map和Set是 一种适合动态查找的集合容器。
二分搜索树 BST 在JDK中主要是TreeSet 和 TreeMap
哈希表 在JDK中主要是HashSet 和 HashMap
Set:存储不重复的Key值,使用Set来进行去重操作处理。
Map:存储的是Key = Value键值对,若需要根据Key找到相应的Value使用Map集合。
1.Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
2.Map中存放键值对的Key是唯一的,value是可以重复的
3.在Map中插入键值对时,key不能为空,否则就会抛NullPointerException异常,但是value可以为空
4.Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
5.Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
6.Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进重新插入。
1.HashMap是基于哈希表 + 红黑树的结构(JDK8之后),HashMap的元素保存顺序与元素的插入顺序无关,key和value都可以为null。
2.TreeMap是基于红黑树的结构,TreeMap的元素保存顺序与元素的插入顺序也无关,key不能为null,value可以为null。使用TreeMap保存元素时,元素必须是Comparable子类或者传入比较器
3.LinkedHashMap就是在HashMap的基础上维护了一个链表来记录元素的插入先后,可以按照元素的插入顺序来保存元素。
去重,Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。
遍历Set集合,直接使用for - each循环即可(只要是Iterable接口的子类,都可以直接使用for - each循环),在遍历Map集合时需要将Map转为Set - for(Map.entry<具体类型> entry : map.entrySet())
1.Set是继承自Collection的一个接口类。
2.Set中只存储了key,并且要求key一定要唯一。
3.Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的。
4.Set最大的功能就是对集合中的元素进行去重。
5.实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序。
6.Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入。
7.Set中不能插入null的key。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。