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);
}
}