package day18_Map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
 * 需求:作为学生来说,是根据学号来区别不同的学生的,那么假设我现在已经知道了学生的学号。
 * 我要根据学号去获取学生姓名,请问怎么做?
 * 
 * 分析:
 *      如果采用前面讲解的集合,我们只能把学号和学生姓名作为一个对象的成员
 *      然后存储整个对象,将来遍历的时候,判断,获取对应的名称
 *      但是呢?如果我都能把学生姓名拿出来了,我还需要根据学号去找吗?
 *      针对我们目前的这种需求,Java提供了一种新的集合Map
 *      通过查看API,我们知道集合API的最大的一个特点,就是它可以通过存储键值对的元素,这个时候存储我们上面的需求,就可以这样做
 *          学号1 姓名1
 *          学号2 姓名2
 *          学号3 姓名3
 *          学号2(不行) 姓名4
 *          学号4 姓名4
 * 
 * Map集合的特点:
 *      将键映射到值得对象,一个映射不能包含重复的键;每个键最多只能映射到一个值。
 *      
 * Map集合和Collection集合的区别?
 *      Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。
 *      Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。
 * 
 * 注意:
 *      Map集合的数据结构值针对键有效,跟值无关。
 *          HashMap,TreeMap
 *      Collection集合的数据结构是针对元素有效。
 *      
 * Map集合的功能概述:
 *      1:添加
 *          V put(K key,V value):添加功能,这个其实还有另一个功能。
 *              如果键是第一次存储,就直接存储元素,返回null
 *              如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值
 *      2:删除
 *          void clear():移除所有的键值对元素
 *          V remove(Object key):根据键删除键值对元素,并把值返回 
 *      3:判断
 *          boolean containsKey(Object key):判断集合是否包含指定键
 *          boolean conatinValue(Object value):判断集合是否包含值
 *          boolean isEmpty():判断集合是否为空
 *      4:获取
 *          set<Map.Entry<K,V>>entrySet<>:???
 *          V get(Object key):根据键获取值
 *          Set<K> ketSet():获取集合中所有键的集合
 *          Collection<V>value():获取集合中所有值的集合
 *      5:长度
 *          int size():返回集合中键值对的对数
 *      
 * */
public class MapDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String, String> map = new HashMap<String, String>();
        // 添加元素
        // V put(K key,V value)
        // System.out.println("put:"+map.put("文章", "马伊琍"));//null
        // System.out.println("put:"+map.put("文章", "姚笛"));//马伊琍

        map.put("邓超", "孙俪");
        map.put("黄晓明", "杨颖");
        map.put("周杰伦", "昆凌");

        // void clear()
        // map.clear();

        // V remove(Object key)
        // System.out.println("remove:"+map.remove("黄晓明"));//杨颖
        // System.out.println("remove:"+map.remove("黄晓波"));//null

        // boolean containsKey(Object key)
        // System.out.println("containsKey:"+map.containsKey("黄晓明"));//true
        // System.out.println("containsKey:"+map.containsKey("黄晓波"));//false

        // boolean isEmpty()
        // System.out.println("isEmpty:"+map.isEmpty());//false

        // int size()
        // System.out.println("size:"+map.size());//3

        // V get(Object key)
        // System.out.println("get:"+map.get("黄晓明"));//杨颖

        // Set<K> ketSet()
        Set<String> set = map.keySet();
        for (String key : set) {
            System.out.println(key);
            // 邓超
            // 周杰伦
            // 黄晓明
        }

        // Collection<V>value()
        Collection<String> values = map.values();
        for(String value:values){
            System.out.println(value);
            //孙俪
            //昆凌
            //杨颖
        }

        // 输出集合名称
        System.out.println("map:" + map);
    }

}