17.3 Map接口概述
实现Map接口的集合类用来存储“键-值”映射对。key-value
Map实现类中存储的“键-值”映射对是通过键来唯一标识,Map底层的“键”是用Set来存放的。即:key 不可重复。
映射Map每个元素含有两个部分:名称(key)和值(value)。其中key不得重复,所以它可以组成一个Set,而value部分可以重复可以组成一个Collection。
常用的实现子类: HashMap、LinkedHashMap
HashMap和TreeMap区别与HashSet与TreeSet的区别完全一致。
17.3.1 Map接口的常用方法:重点
方法名 | 描述 |
---|---|
Object put(Object key, Object value); | 将指定的“键-值”对存入Map中,返回已经存在的key的Values。如果不存在则返回null。(添加或修改值) |
Object get(Object key); | 返回指定键所映射的值 |
Object remove(Object key); | 根据指定的键把此“键-值”对从Map中移除,返回被移除的旧的value。 |
boolean containsKey(Object key); | 判断此Map是否包含指定键的“键-值”对。 |
boolean containsValue(Object value); | 判断此Map是否包含指定值的“键-值”对。 |
boolean isEmpty(); | 判断此Map中是否有元素。 |
int size(); | 获得些Map中“键-值”对的数量。 |
void clear(); | 清空Map中的所有“键-值”对。 |
Set keySet(); | 返回此Map中包含的键的Set集。 |
Collection values(); | 返回此Map中包含的值的Collection集。 |
扩展:
boolean remove (key, value) ; //1.8新增
17.3.2 Map接口的常用实现类
17.3.2.1 HashMap
使用频率最高的一种Map集合。
HashMap内部对“键”用Set进行散列存放。所以根据“键”去取“值”的效率很高。
//HashMap的两种遍历方式(两方式都可以选用foreach或者iterator)
HashMap<String,String> hashMap = new HashMap<>();
//方式一:entrySet(); 推荐这种,效率更高,只在Set集合中操作数据
Set<Entry<String, String>> entrySet = hashMap.entrySet();
for (Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
//方式二:keySet();
Set<String> keySet = hashMap.keySet();
Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String key = it.next();
String value = hashMap.get(key);//还需要在HashMap中操作数据
System.out.println(key+":"+value);
}
17.3.2.2 LinkedHashMap(了解)
底层使用链表来记住了key的插入的顺序;
总结:一个‘有序’(迭代的顺序和插入的顺序一致)的HashMap。
17.3.2.3 HashTable(了解)
HashTable用法与HastMap集合基本相同,只是HashTable是比较老的类集,是线程安全的,所以效率较低。
17.4 Map.Entry
Map.Entry是Map中内部定义的一个接口,专门用来保存key-value的内容。
可以通过map集合的entrySet()方法来获得所有的Map.Entry组成的set集合。
Map<String, Integer> map = new HashMap<String,Integer>();
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
Entry<String, Integer> entry = iterator.next();
Integer value = entry.getValue();//获取值
String key = entry.getKey();//获取键