Map遍历键值对案例练习
package Day15;/*
@Author wanghongyuan
@Date 2020/12/24
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
java.util.Map集合,<K,V>集合
Map集合的特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)
2.Map集合中的元素,Key和value的值可以相同也可以不同。
3.Map集合中的元素,Key是不允许重复的,value可以重复的
4.Map集合中的元素,key和value是一一对应的.
java.util.HashMap<K,V>集合 implements Map<k,v>接口
HashMap集合的特点:
1.HashMap集合底层是哈希表:查询速度特别快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8):提高查询速度
2.HashMap集合是一个无序的集合,存储元素和取出元素的顺序可能不一致
java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
LinkedHashMap特点:
1.LinkedHashMap集合底层是一个哈希表+链表(保证迭代的顺序)
2.LinkedHashMap集合是一个有序的集合,储存元素和取出元素的顺序是一致的
*/
public class Demo01Map {
public static void main(String[] args) {
/*
Map集合中的第一种遍历方式:通过键找值的方式
Map集合中的方法:
set<k> KeySet()返回此映射中包含的键的Set 试图。
实现步骤:
1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
2.遍历set集合,获取Map集合中的每一个key
3.通过Map集合中的方法get(key),通过key找到value
*/
// 创建一个Map集合对象
Map<String,Integer> map = new HashMap<>();
map.put("赵丽颖",168);
map.put("王颖",168);
map.put("颖",168);
/*
通过Map集合方法中的Map.Entry把Map集合内部的多个Entry对象取出来,存储到Set集合中。遍历Set集合,获取Set集合中的每一个Entry对象。
这个Entry对象中的getKey()获取key和getvalue()获取value
*/
Set<Map.Entry<String, Integer>> entries = map.entrySet();
// System.out.println(entries);
Iterator<Map.Entry<String, Integer>> it1 = entries.iterator();
while (it1.hasNext()){
Map.Entry<String, Integer> entry = it1.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("键是:"+key+" 值是"+value);
}
System.out.println("=============================================");
// 1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
Set<String> set = map.keySet();
// 2.遍历set集合,获取Map集合中的每一个key
for (String key : set) {
// 3.通过Map集合中的方法get(key),通过key找到value
Integer value = map.get(key);
System.out.println(key+value);
}
// 使用增强for循环
Iterator<String> it = set.iterator();
while (it.hasNext()){
String key = it.next();
// System.out.println(key);
Integer value = map.get(key);
System.out.println(key+value);
}
// show01();
// show02();
// show03();
// show04();
}
/*
boolean containsKey(object key) 判断集合中是否包含有指定的键
包含返回true,不包含返回false
*/
private static void show04() {
Map<String,Integer> map1= new HashMap<>();
map1.put("周星驰",162);
map1.put("李健",187);
map1.put("赵四",201);
System.out.println(map1);
boolean b = map1.containsKey("赵四3");
System.out.println(b);
}
/*
public V get(Object key)根据指定的键,在Map集合中获取对应的值
返回值:
key存在,返回对应的value值
key不存在,返回null
*/
private static void show03() {
Map<String,Integer> map1= new HashMap<>();
map1.put("周星驰",162);
map1.put("李健",187);
map1.put("赵四",201);
System.out.println(map1);
Integer i = map1.get("李健");
System.out.println("李健对应的值是:"+i);
}
/*
public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除的元素的值。
返回值:V
key存在,v返回被删除的值
key不存在,v返回null
*/
private static void show02() {
Map<String,Integer> map1= new HashMap<>();
map1.put("周星驰",162);
map1.put("李健",187);
map1.put("赵四",201);
System.out.println(map1);
int re = map1.remove("赵四0");//NullPointerException, 自动拆箱,返回的是空,空返回给int类型,空可以返回给包装类,但是不能返回给基本数据类型。尽量使用包装类,少使用基本数据类型。
System.out.println("被移除的Value值是:"+re);
System.out.println(map1);
}
/*
public V put(K key,V value):把指定的键与指定的值添加到Map集合中。
返回值:v
存储键值对的时候,key不重复,返回的v是null
存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值
*/
private static void show01() {
// 创建Map集合对象,多态
Map<String, String> map = new HashMap<>();
String v1 = map.put("周杰伦", "蔡依林");
String v2 = map.put("周杰伦", "蔡依林1");
map.put("冷锋","龙小云");
map.put("杨过","小龙女");
map.put("尹志平","小龙女");
System.out.println("判断是否有重复的元素在Map集合中:"+v1);//null,存储键值对的时候,key不重复,返回的v是null
System.out.println("被替换的元素是:"+v2);//蔡依林存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值
System.out.println("Map集合中的元素有:"+map.size()+"个");
}
}