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