Set和Map
Set和Map
TreeSet和TreeMap在Java中利用搜索树实现的Map和Set;实际上是用的红黑树,而红黑树是一颗近似平衡的二叉搜索树。
关于二叉搜索树 :见下面链接:
链接
HashSet和HashMap在java中利用哈希表实现;Java中使用哈希桶方式解决冲突的;Java会在冲突链表长度大于一定的阀值后,将链表转变为搜索树(红黑树);
Set
注意:
- Set继承自Collection接口类
- Set中只存储了key,并且要求key一定唯一
- Set的底层是使用Map实现的,其使用key与Object的一个默认对象作为键值对插入到Map中
- Set的最大功能就是对集合中的元素去重
- 实现Set接口的常用类有TreeSet、HashSet,还有一个LinkedSet,LinkedSet是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序
- Set中的key不能修改,如果需要修改,将原来的删除掉,重新插入
- Set中不能插入null的key
Set中的常用方法:
方法 | 解释 |
---|---|
boolean add(E e) | 添加元素 |
void clear() | 请空 |
boolean contains(Object o) | 判断元素是否存在 |
boolean remove(Object o) | 删除元素 |
Object[] toArray() | Set中的元素转换数组 |
Map
Map中存储的就是Key-value的键值对,Set中只存储了key。
Map是一个接口类,没有继承Collection,该类中存储的是的键值对,并且k一定是唯一的,不能重复。
注意:
- Map是一个接口,不能实例化对象,如果需要只能,实例化其实现类TreeMap和HashMap。
- Map中存放的键值对的key是唯一的,value可以重复
- 在Map中,插入键值对的时候,key不能为空,但是value可以为空
- Map中的key可以全部分离出来存储在Set中(因为key不重复)
- Map中value可以分离出来,存储在Collection中(因为value有重复)
- Map的key不能修改,只能删除再重新插入,value可以修改
Map中的常用方法:
方法 | 解释 |
---|---|
V get(Object key) | 返回key对应的value |
V getOrDefault(Object key,Object defaultValue) | 返回key对应的value ,key不存在返回默认值 |
V put(K key ,V value) | 设置key对应的value,第一次为插入 |
V remove(Object o) | 删除key对应的映射关系 |
boolean containsKey(Object key) | 判断是否包含key |
boolean containsValue(Object value) | 判断是否包含value |
Set<Map.Entry<k,v>>entrySet() | 返回所有的key-value映射关系 |
关于Map.Entry<k,v>
Map.Entry<k,v>是Map中实现存放key-value的内部类,主要提供了key-value的获取,以及value的设置和key的比较方式。
方法 | 解释 |
---|---|
K getKey() | 返回entry中key |
V getValue() | 返回entry中value |
V setValue(V value) | 将键值对中value替换 |