Map概述

Map常见子类

«interface»
Map
«abstract»
AbstractMap
«interface»
SortedMap
«Class»
HashMap
«Class»
LinkedHashMap
«Class»
Hashtable
«Class»
TreeMap

Map集合存储元素是成对出现的,Map集合的键是唯一的,每个键最多只能映射到一个值。 不同键映射的值是可重复的。

注意:Map集合的数据结构是针对键有效,跟值无关。而Collection集合的数据结构是针对元素有效

Map集合的功能概述

  • 1: 添加功能
    • V put(K key, V value):添加元素。
      • 如果键是第一次存储,就直接存储元素,返回null;
      • 如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值。
  • 2: 删除功能
    • void clear():移除所有的键值对元素。
    • V remove(Object key):根据键删除键值对元素,并把值返回。
  • 3: 判断功能
    • boolean containsKey(Object key):判断集合是否包含指定的键
    • boolean containsValue(Object value):判断集合是否包含指定的值
    • boolean isEmpty():判断集合是否为空
  • 4: 获取功能
    • Set keySet():获取集合中所有键的集合
    • V get(Object key):根据键获取值
    • Set> entrySet():获取所有键值对对象的集合
    • Collection values():获取集合中所有值的集合
  • 5: 长度功能
    • int size():返回集合中的键值对的总数
public class MapDemo {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        // 添加元素
        System.out.println("put:" + map.put("文章", "马伊俐"));
        System.out.println("put:" + map.put("文章", "姚笛"));
        System.out.println("map=" + map);

        map.put("杨过", "小龙女");
        map.put("李雷", "韩梅梅");
        map.put("吕布", "貂蝉");
        System.out.println("map=" + map);

        // void clear():移除所有的键值对元素
        //map.clear();
        //System.out.println("map=" + map);

        // V remove(Object key):根据键删除键值对元素,并把值返回
        System.out.println("remove:" + map.remove("杨过"));
        System.out.println("remove:" + map.remove("郭靖"));
        System.out.println("map:" + map);

        // boolean containsKey(Object key):判断集合是否包含指定的键
        System.out.println("containsKey:" + map.containsKey("杨过"));
        System.out.println("containsKey:" + map.containsKey("李雷"));

        // boolean isEmpty():判断集合是否为空
        System.out.println("isEmpty:"+map.isEmpty());

        //int size():返回集合中的键值对的对数
        System.out.println("size:"+ map.size());
    }
}

输出:
put:null
put:马伊俐
map={文章=姚笛}
map={杨过=小龙女, 李雷=韩梅梅, 吕布=貂蝉, 文章=姚笛}
remove:小龙女
remove:null
map:{李雷=韩梅梅, 吕布=貂蝉, 文章=姚笛}
containsKey:false
containsKey:true
isEmpty:false
size:3

代码第8行,返回“马伊俐”。put()不仅可以添加元素,如果键值存在,会修改原先键值映射的值,并返回以前的值。

遍历功能

  1. for循环遍历keySet
  2. keySet迭代器遍历map
  3. for循环遍历entrySet
  4. entrySet()迭代器遍历map
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();

        map.put("杨过", "小龙女");
        map.put("李雷", "韩梅梅");
        map.put("吕布", "貂蝉");

        /* 方法一:for循环遍历keySet*/
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key="+ key + ",value="+ map.get(key));
        }

        /* 方法二:keySet迭代器遍历map*/
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()){
            String key = iterator.next();
            System.out.println("key="+ key + ",value="+ map.get(key));
        }

        /* 方法三:for循环遍历entrySet*/
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for(Map.Entry<String, String> entry : entrySet){
            System.out.println("key="+ entry.getKey() + ",value="+ entry.getValue());
        }

        /* 方法四:entrySet()迭代器遍历map*/
        Set<Map.Entry<String, String>> entrySet2 = map.entrySet();
        Iterator<Map.Entry<String, String>> iterator2 = entrySet2.iterator();
        while(iterator2.hasNext()){
            Map.Entry<String, String> next = iterator2.next();
            System.out.println(next.getKey()+"=="+next.getValue());
        }

        Collection<String> values = map.values();
        for(String value : values){
            System.out.println(value);
        }
    }
}

输出:
key=杨过,value=小龙女
key=李雷,value=韩梅梅
key=吕布,value=貂蝉
...
小龙女
韩梅梅
貂蝉

Entry是 Map 的一个内部接口

所以 Map.Entry 是一个类型。调用entrySet()返回一个 Set 集合,此集合的类型为Map.Entry。通过接口中有getKey()getValue()方法获取键值。

总结

Map 存储一对数据,而 Collection 存储一列数据。

你可能感兴趣的:(Java,java)