Java中Map的使用
Map是一个接口,主要存储键值对,其主要的实现类有:
-
HashMap:
key的值没有顺序,常用来做统计,不是线程安全的。key和value都可以为null
-
ConcurrentHashMap:
ConcurrentHashMap是HashTable的进化版,线程安全,key和value都不可以为null
-
TreeMap:
会根据Key进行排序,key不可以为null,value可以
-
LinkedHashMap:
它继承了HashMap,它内部有一个链表,保持Key插入的顺序,key和value都可以为null
常用方法
Map方法 | 描述 |
---|---|
V put(K key, V value) | 设置key的值为Value,若key原来存在,则返回原来的Value,否则返回null |
V get(Object key) | 获取key的Value,若key不存在,则返回null |
V getOrDefault(Object key, V defaultValue) | 获取key的value,若key不存在,则返回defaultValue |
V remove(Object key) | 删除key键值对 |
void clear() | 清空Map |
boolean isEmpty() | 判断是否为空,空返回true |
boolean containsKey(Object key) | 判断key键是否存在,存在返回true |
boolean containsValue(Object value) | 判断value值是否存在,存在返回true |
int size() | 获取长度 |
Map的遍历
有三种方式,他们都是Map的方法:
先定义一个Map<String, Integer> map = new HashMap<>();
来举例子
-
Set<K> keySet()
:可以获取所有的key,并保存在Set中
Set<String> keys = map.keySet(); for (String key : keys){ System.out.println(key); }
-
Collection<V> values()
获取所有的value,保存在Collection中
Collection<Integer> values = map.values(); for(int value:values){ System.out.println(value); }
-
Set<Map.Entry<k,v>> entrySet()
将所有键值对都保存为
Map.Entry
对象,并将这些对象保存在Set中,可以使用Map.Entry
对象的getKey
和getValue
来获取键和值,比较万能,推荐使用for (Map.Entry<String, Integer> entry:map.entrySet()){ System.out.println(entry.getKey()+":"+entry.getValue()); }