作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?
如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。
但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?
针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,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 }