1. Map与Collection并列存在。用于保存具有映射关系的数据:Key:value(双列元素)
  2. Map中的key和value可以是任何应用类型的数据,会封装到HashMap$Node对象中
  3. Map中的key不允许重复,原因和HashSet 一样,
  4. Map中的Value可以重复
  5. Map的key可以为null,value 也可以为null,注意key为nulll,只能由一个,value为null,可以多个
  6. 常用String类作为Map的key
  7. key和value之间存在单向一对一的关系,即通过制定的key总能找到对应的value
  8. Map存放数据的Key-value,一对k-v是放在一个HashMap$Node中的,又因为Node实现了Entry接口,有些书上也说一对k-v就是一个Entry

Map接口常用方法

package top.ltyzqhh.collection;

import java.util.HashMap;
import java.util.Map;

public class Map_ {
    public static void main(String[] args) {
        Map map = new HashMap();

        map.put("no1","小明");
        map.put("no2","张无忌");
        map.put("no3",null);
        map.put("no4","小红");
        map.put(null,"小红");
        map.put("no5","小军");
        map.put("no5","小美");//“小军”会被“小美”替换
        System.out.println(map);
        //remove:根据键删除映射关系
        map.remove(null);
        System.out.println(map);

        //get:根据键获取值
        Object val = map.get("no4");
        System.out.println("no4="+val);

        //size:获取元素个数
        System.out.println( map.size());

        //isEmpty:判断个数是否为0
        System.out.println(map.isEmpty());

        //clear:清除
        //map.clear();
        System.out.println(map);

        //containsKey:查找键是否存在
        System.out.println(map.containsKey(null));
        System.out.println(map.containsKey("no4"));

    }
}

Map遍历

package top.ltyzqhh.collection;

import java.util.*;

public class Mapfor {
    public static void main(String[] args) {
        Map map = new HashMap();

        map.put("no1","小明");
        map.put("no2","张无忌");
        map.put("no3",null);
        map.put("no4","小红");
        map.put(null,"小红");
        map.put("no5","小军");
        map.put("no5","小美");

        //第一组:先取出 所有的Key ,通过Key 取出对应的Value
        Set keyset = map.keySet();

        //(1)增强for循环
        System.out.println("==============增强for循环(keySet)==============");
        for (Object key :keyset) {
            System.out.println(key+"="+map.get(key));
        }

        //(2)迭代器
        System.out.println("==============迭代器(keySet)==============");
        Iterator iterator = keyset.iterator();
        while (iterator.hasNext()) {
            Object key =  iterator.next();
            System.out.println(key+"="+map.get(key));
        }

        //第二组:  把所有的values取出
        Collection values = map.values();
        //这里可以使用所有的Collection使用的遍历方法
        //增强for循环
        System.out.println("============取出所有Value 增强for=========");
        for (Object value :values) {
            System.out.println(value+"="+map.get(value));
        }
        //迭代器
        System.out.println("============取出所有Value 迭代器=========");
        Iterator iterator1 = values.iterator();
        while (iterator1.hasNext()) {
            Object value =  iterator1.next();
            System.out.println(value+"="+map.get(value));
        }

        //第三组:通过EntrySet 来获取k-v
        Set set = map.entrySet();
        //(1)增强for
        System.out.println("================使用EntrySet的for增强=================");
        for (Object entry :set) {
            //将entry对象转成Map.Entry
            Map.Entry m =(Map.Entry) entry;
            System.out.println(m.getKey()+"="+m.getValue());
        }
        //迭代器
        System.out.println("================使用EntrySet 迭代器=================");
        Iterator iterator2 = set.iterator();
        while (iterator2.hasNext()) {
            Object entry =  iterator2.next();
            Map.Entry m =(Map.Entry) entry;
            System.out.println(m.getKey()+"="+m.getValue());
        }

    }
}