作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?

  如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。
  但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?
  针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,Java就提供了一种新的集合 Map。
  通过查看API,我们知道Map集合的一个最大的特点,就是它可以存储键值对的元素。这个时候存储我们上面的需求,就可以这样做
      学号1 姓名1
      学号2 姓名2
      学号3 姓名3
      学号2(不行)姓名4
      学号4 姓名4
  Map集合的特点:
      将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

  Map集合和Collection集合的区别?
      Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
      Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)

  注意:
      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 containsValue(Object value):判断集合是否包含指定的值
      boolean isEmpty():判断集合是否为空
    4:获取功能
      Set<Map.Entry<K,V>> entrySet():???
        V get(Object key):根据键获取值
      Set<K> keySet():获取集合中所有键的集合
        Collection<V> values():获取集合中所有值的集合
    5:长度功能
      int size():返回集合中的键值对的对数



1 package map_son;
 2 
 3 import java.util.Collection;
 4 import java.util.HashMap;
 5 import java.util.Map;
 6 import java.util.Set;
 7 
 8 public class MapDemo1 {
 9 
10     public static void main(String[] args) {
11         
12         // 首先创建一个map集合
13         Map<String ,String> m = new HashMap<String,String>();
14         
15         //1:添加功能    V put(K key,V value):添加元素。这个其实还有另一个功能
16         //如果键是第一次存储,就直接存储元素,返回null,如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
17         m.put("孙悟空","齐天大圣");
18         m.put("唐僧", "功德佛");
19         m.put("猪八戒", "净坛使者");
20         m.put("沙僧", "金身罗汉");
21         m.put("白龙马", "八部天龙");
22         m.put("孙悟空","斗战胜佛");
23         
24         System.out.println(m);//{白龙马=八部天龙, 沙僧=金身罗汉, 孙悟空=斗战胜佛, 猪八戒=净坛使者, 唐僧=功德佛}    
25         //第一个和最后一个的键值都是孙悟空,键值一样,后面的值会替换掉前面的,所以打印出的是孙悟空=斗战胜佛
26         System.out.println("-----------------");
27         
28         //2:删除功能    void clear():移除所有的键值对元素      
29         //m.clear();
30         //System.out.println(m);//{}
31         
32         //2:删除功能    V remove(Object key):根据键删除键值对元素,并把值返回
33         m.remove("白龙马");
34         System.out.println(m);//{沙僧=金身罗汉, 孙悟空=斗战胜佛, 猪八戒=净坛使者, 唐僧=功德佛}
35         System.out.println("-----------------");
36         
37         //3:判断功能   boolean containsKey(Object key):判断集合是否包含指定的键
38           System.out.println(m.containsKey("猪八戒"));//true
39         
40           //3:判断功能   boolean containsValue(Object value):判断集合是否包含指定的值
41           System.out.println(m.containsValue("斗战胜佛"));//true
42           System.out.println(m.containsValue("八部天龙"));//false ,因为之前把他删了,所以现在没有了
43         
44           //3:判断功能   boolean isEmpty():判断集合是否为空
45           System.out.println(m.isEmpty());//false
46           
47           //4:获取功能  V get(Object key):根据键获取值
48           System.out.println(m.get("孙悟空"));//斗战胜佛
49           
50           //4:获取功能  Set<K> keySet():获取集合中所有键的集合
51           Set<String> s = m.keySet();
52           for(String ss : s){
53               System.out.println(ss);//沙僧   孙悟空  猪八戒  唐僧 //白龙马之前删了
54           }
55           
56           //4:获取功能  Collection<V> values():获取集合中所有值的集合
57           Collection<String> s1 = m.values();
58           for(String ss1 : s1){
59               System.out.println(ss1);//金身罗汉  斗战胜佛  净坛使者    功德佛 //白龙马的之前删了
60           }
61           
62           //5:长度功能   int size():返回集合中的键值对的对数
63           System.out.println(m.size()); //4 
64     }
65 
66 }