Map集合
在学校里每个学生都有自己的学号,而且我们查询成绩也总是根据学号去查询,学号就相当Map集合中的Key,而成绩就相当于Value,接下来让我们来了解一下Map集合
Map集合:键值的映射关系的一种集合(接口)
Map<K,V> ,在Map集合中,只针对键有效,跟值无关
Map接口的子实现类:HashMap和TreeMap
面试题:
Map集合和Collection的区别?
Map集合:是一种键和值的映射关系(双列集合) 当作为:夫妻对
Collection集合:单列集合,只能存储一种类型的元素,当作为:光棍
Map集合的一些简单的功能:
添加功能:
put(K key,V value) :添加功能:将指定的值和键关联起来
删除功能
void clear():删除所有映射关系
Vremove(Object key)如果存在一个键的映射关系,则将其从此映射中移除
判断功能:
boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true
boolean containsValue(Object value):映射关系中是否包含指定的值
boolean isEmpty():判断映射关系是否为空
例如:
package com.Map; import java.util.HashMap; import java.util.Map; public class MapDome { public static void main(String[] args) { //通过HashMap子实现类来创建Map集合的对象 Map<String,String> map=new HashMap<String,String>(); //添加功能 map.put("杨过", "小龙女"); map.put("郭靖", "黄蓉"); map.put("张无忌", "赵敏"); map.put("萧炎", "萧薰儿"); System.out.println("map:"+map); System.out.println("--------------"); //删除功能,暴力删除,将所有的映射关系全部删除 // map.clear(); // System.out.println("map:"+map); //remove(Object key)删除一个键 System.out.println("remove:"+map.remove("张无忌")); System.out.println("map:"+map); System.out.println("---------------"); //boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true System.out.println("containsKey:"+map.containsKey("杨过")); System.out.println("containsKey:"+map.containsKey("林动")); System.out.println("-----------------"); //boolean containsValue(Object value):映射关系中是否包含指定的值 System.out.println("containsValue:"+map.containsValue("小龙女")); System.out.println("containsValue:"+map.containsValue("应欢欢")); System.out.println("-----------------"); //boolean isEmpty():判断映射关系是否为空 System.out.println("isEmpty:"+map.isEmpty()); } } 运行结果: map:{杨过=小龙女, 萧炎=萧薰儿, 郭靖=黄蓉, 张无忌=赵敏} -------------- remove:赵敏 map:{杨过=小龙女, 萧炎=萧薰儿, 郭靖=黄蓉} --------------- containsKey:true containsKey:false ----------------- containsValue:true containsValue:false ----------------- isEmpty:false
Map集合的添加功能有这样一个特点需要注意:
package org.westos_01; import java.util.HashMap; import java.util.Map; public class MapDome2 { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); System.out.println(map.put("李小璐", "贾乃亮")); System.out.println(map); System.out.println(map.put("李小璐", "皮几万")); System.out.println(map); System.out.println(map.put("李小璐", "李晨")); System.out.println(map); } } 运行结果: null {李小璐=贾乃亮} 贾乃亮 {李小璐=皮几万} 皮几万 {李小璐=李晨}
当你第一次添加的时候,返回值是null,键不变将值改变后,返回值变成前一个值,而集合中现有的映射取代了之前的映射,所以要注意这个问题
获取并遍历出来:
方式1:
Set<K> keySet():获取映射关系中所有的键的集合
get(Object key):通过键找值
int size()返回此映射中的键-值映射关系数
例如:
package com.Map; import java.util.HashMap; import java.util.Map; import java.util.Set; /* 获取功能 * int size()返回此映射中的键-值映射关系数 * Set<K> keySet():获取映射关系中所有的键的集合 * V get(Object key):通过键找值 */ public class MapDome2 { public static void main(String[] args) { //创建Map集合对象 Map<String,String> map=new HashMap<String,String>(); map.put("杨过", "小龙女"); map.put("郭靖", "黄蓉"); map.put("张无忌", "赵敏"); map.put("萧炎", "萧薰儿"); //映射的关系数 int num=map.size(); System.out.println("num:"+num); //用KeySet方法将所有键的集合放在set集合中 Set<String> set=map.keySet(); //循环遍历 for(String Key:set) { String value=map.get(Key); System.out.println(Key+"="+value); } } } 运行结果: num:4 杨过=小龙女 萧炎=萧薰儿 郭靖=黄蓉 张无忌=赵敏
方式2:
Set<Map.Entry<K,V>> entrySet() :和Map集合的遍历有关系(键值对对象)
K getKey() 和 v getValue(),获取键值对对象中的每个键和每个值
例如:
package com.Map; import java.util.HashMap; import java.util.Map; import java.util.Set; //Set<Map.Entry<K,V>> entrySet() :和Map集合的遍历有关系(键值对对象) //K getKey() 和 v getValue(),获取键值对对象中的每个键和每个值 public class MapDome3 { public static void main(String[] args) { //创建Map集合对象 Map<String,String> map=new HashMap<String,String>(); map.put("杨过", "小龙女"); map.put("郭靖", "黄蓉"); map.put("张无忌", "赵敏"); map.put("萧炎", "萧薰儿"); //调用entrySet方法将所有的键值对放在set集合里 Set<Map.Entry<String,String>> set=map.entrySet(); //循环遍历 for(Map.Entry<String,String> entry:set) { //获取键值对中的每一个键 String Key=entry.getKey(); //获取键值对中的每一个值 String Value=entry.getValue(); //输出 System.out.println(Key+"="+Value); } } } 运行结果: 杨过=小龙女 萧炎=萧薰儿 郭靖=黄蓉 张无忌=赵敏
上述两种方法,推荐使用第一种,第二种从内存角度来说不推荐使用,通过键值对来找每一个对应的键和值有点繁琐,第一种比较方便简洁,通过键来找出对应的值