17.3 Map接口概述

  1. 实现Map接口的集合类用来存储“键-值”映射对。key-value

  2. Map实现类中存储的“键-值”映射对是通过键来唯一标识,Map底层的“键”是用Set来存放的。即:key 不可重复。

  3. 映射Map每个元素含有两个部分:名称(key)和值(value)。其中key不得重复,所以它可以组成一个Set,而value部分可以重复可以组成一个Collection。

  4. 常用的实现子类: HashMap、LinkedHashMap

  5. 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();//获取键

results matching ""

    No results matching ""