Map
1.Map的说明:Map
是一个接口类,该类没有继承自
Collection
,该类中存储的是
<K,V>
结构的键值对,并且
K
一定是唯一的,不
能重复,K代表关键字,V代表关键字所对应的值。
2.Map.Entry<K,V>的说明:Map.Entry<K, V> 是
Map
内部实现的用来存放
<key, value>
键值对映射关系的内部类
,该内部类中主要提供了
<key, value>
的获取,
value
的设置以及
Key的比较方式。
Map.Entry<K,V>没有提供设置Key的方法。
方法 | 解释 |
K getKey() | 返回entry中的key |
V getValue() | 返回entry中的value |
V setValue(V value) | 将键值对中的value替换为指定value |
3.Map的使用方法说明
方法 | 解释 |
V get(Object key)
|
返回 key 对应的 value
|
V getOrDefault(Object key, V defaultValue)
|
返回 key 对应的 value,key 不存在,返回默认值
|
V put(K key, V value)
|
设置 key 对应的 value
|
V remove(Object key)
|
删除 key 对应的映射关系
|
Set<K> keySet()
|
返回所有 key 的不重复集合
|
Collection<V> values()
|
返回所有 value 的可重复集合
|
Set<Map.Entry<K, V>> entrySet()
|
返回所有的 key-value 映射关系
|
boolean containsKey(Object key)
|
判断是否包含 key
|
boolean containsValue(Object value)
| 判断是否包含value |
注意:
(1) Map
是一个接口,不能直接实例化对象
,如果
要实例化对象只能实例化其实现类
TreeMap或
者HashMap
(2) Map
中存放键值对的
Key
是唯一的,
value是可以重复的
(3) 在
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的区别
Map底层结构 | TreeMap | HashMap |
底层结构 | 红黑树 | 哈希桶 |
插入/删除/查找时间复杂度 | O(log N) |
O(1)
|
是否有序 | 关于Key有序 | 无序 |
线程安全 | 不安全 | 不安全 |
插入/删除/查找区别 |
需要进行元素比较
|
通过哈希函数计算哈希地址
|
比较与覆写
|
key
必须能够比较,否则会抛出 ClassCastException异常
|
自定义类型需要覆写
equals
和
hashCode
方法
|
应用场景
|
需要
Key
有序场景下
|
Key
是否有序不关心,需要更高的
时间性能
|
Set
Set
与
Map
主要的不同有两点:
Set
是继承自
Collection
的接口类,
Set
中只存储了
Key
。
1.常见方法说明
方法 | 解释 |
boolean
add
(E e)
|
添加元素,但重复元素不会被添加成功
|
void
clear
()
|
清空集合
|
boolean
contains
(Object o)
|
判断
o
是否在集合中
|
Iterator<E>
iterator
()
|
返回迭代器
|
boolean
remove
(Object o)
|
删除集合中的 o
|
int size()
|
返回
set
中元素的个数
|
boolean isEmpty()
|
检测
set
是否为空,空返回
true
,否则返回
false
|
Object[] toArray()
|
将
set
中的元素转换为数组返回
|
boolean containsAll(Collection<?> c)
|
集合
c
中的元素是否在
set
中全部存在,是返回
true
,否则返回false
|
boolean addAll(Collection< extends E> c)
|
将集合
c
中的元素添加到
set
中,可以达到去重的效果
|
注意:
(1)Set
是继承自
Collection
的一个接口类
(2)Set
中只存储了
key
,并且要求
key
一定要唯一
(3)TreeSet
的底层是使用
Map
来实现的,其使用
key
与
Object
的一个默认对象作为键值对插入到
Map
中的
(4)Set
最大的功能就是对集合中的元素进行去重
(5)实现
Set
接口的常用类有
TreeSet
和
HashSet
,还有一个
LinkedHashSet
,
LinkedHashSet
是在
HashSet
的基础上维护了一个双向链表来记录元素的插入次序。
(6)Set
中的
Key
不能修改,如果要修改,先将原来的删除掉,然后再重新插入
(7)TreeSet
中不能插入
null
的
key
,
HashSet
可以。
(8)TreeSet
和
HashSet
的区别
Set底层结构 | TreeSet | HashSet |
底层结构 | 红黑树 | 哈希桶 |
插入
/
删除
/
查找时间复杂度
| O(log N) | O(1) |
是否有序 | 关于Key有序 | 不一定有序 |
线程安全 | 不安全 | 不安全 |
插入/删除/查找区别 |
按照红黑树的特性来进行插入和删除
|
1.
先计算
key
哈希地址
2.
然后进行插入和删除
|
比较与覆写 |
key
必须能够比较,否则会抛出 ClassCastException异常
|
自定义类型需要覆写
equals
和hashCode方法
|
应用场景 | 需要Key有序场景下 |
Key
是否有序不关心,需要更高的时间性能
|