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 keySet() | 返回所有 key 的不重复集合 |
Collection values() | 返回所有 value 的可重复集合 |
Set<Map.Entry<K, V>> entrySet() | 返回所有的 key-value 映射关系 |
boolean containsKey(Object key) | 判断是否包含 key |
boolean containsValue(Object value) | 判断是否包含 value |
遍历map
Map.Entry<K, V> entrySet();//Map.Entry<K, V> 是Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式
for(Map.Entry<K, V> entry : entrySet()){//遍历每一项
System.out.println("key" + entry.getKey() + "value" + entry.getValue())
}
HashMap和TreeMap
Map类是接口,不能直接实例化,必须通过实现Map接口的HashMap和TreeMap进行实例化
Map<Integer,Integer> map = new HashMap<>();
Map<Integer,Integer> map = new TreeMap<>();
HashMap底层是哈希表,一般查询、插入、删除的效率都是O(1)
TreeMap底层是红黑树,操作效率为O(logn),不过TreeMap存储的数据是有序的
没有顺序要求我们一般会选择哈希表存储
**注意:**由于TreeMap是有序存储的,这就意味着存入TreeMap的数据必须要进行比较,因此在使用TreeMap存储引用类型时,我们需要放入一个比较器
Set和Map的关系
在java中Set其实和Map是一个东西,只不过Set只有key没有value,下面是HashSet的源码
从中可以发现Set只不过是存储了一个Map成员,并把map的value设置为了Object对象,之后在Map的基础上进行操作的