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之前:数组+单向链表
JDK18之后:数组+单向链表/红黑树(链表的长度超过8):提高查询的速度
2. hashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致。
java.uti.LinkedHashMap<k,v>
集合 extends HashMap<k,v>
集合
LinkedHashMap的特点:
?
1.LinkedHas hMap集合底层是:哈希表+链表(保证迭代的顺序)。
? 2.LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的.
1 public V put(K key, V value) : 2 /* 把指定的键与指定的值添加到Map集合中。 3 返回值V: 4 存储键值对的时候,key不重复,返回值v是null; 5 存储键值对的时候,key重复,会使用新的value替换map中重复的value, 6 返回被替换的value 7 */ 8 public V remove(Object key) : 9 /* 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 10 返回值V: 11 key存在,V返回被删除的值 12 key不存在,V返回null 13 */ 14 public V get(Object key) 15 /* 根据指定的键[key],在Map集合中获取对应的值。 16 返回值V: 17 key存在,返回被删除的value值 18 key不存在,返回null 19 */ 20 boolean containsKey(object key); 21 /* 判断集合中是否包合指定的鍵。 22 包含返回true 23 不包合含返回true 24 */
实例:
1 package Map集合的学习._3Map集合常用的方法._1普通方法; 2 3 4 import java.util.HashMap; 5 6 /** 7 * @Author Admin 8 * @Classname DemoMapMethod 9 * @Package Map集合的学习._3Map集合常用的方法 10 * @GreatDate 2020/04/20 22:43:29 11 * @Description TODO Map接口【集合】常用的方法 12 */ 13 public class DemoMapMethod { 14 public static void main(String[] args) { 15 showPut(); 16 System.out.println("--------------------------"); 17 showRemove(); 18 System.out.println("--------------------------"); 19 showGet(); 20 System.out.println("--------------------------"); 21 showContainKey(); 22 23 } 24 25 /* 26 boolean containsKey(object key); 27 判断集合中是否包合指定的鍵。 28 包含返回true 29 不包合含返回true 30 */ 31 private static void showContainKey() { 32 //创建Map集合额对象 33 HashMap<String, Integer> map = new HashMap<>(); 34 map.put("赵丽颖", 168); 35 map.put("杨幂", 170); 36 map.put("林志玲", 178); 37 map.put("杨颖", 165); 38 System.out.println(map); 39 System.out.println("----------------------------"); 40 41 boolean b = map.containsKey("赵丽颖"); 42 System.out.println("b:" + b);//true 43 boolean b1 = map.containsKey("赵今麦"); 44 System.out.println("b:" + b1);//false 45 46 } 47 48 /* 49 public V get(Object key) 50 根据指定的键[key],在Map集合中获取对应的值。 51 返回值V: 52 key存在,返回被删除的value值 53 key不存在,返回null 54 */ 55 private static void showGet() { 56 //创建Map集合额对象 57 HashMap<String, Integer> map = new HashMap<>(); 58 map.put("赵丽颖", 168); 59 map.put("杨幂", 170); 60 map.put("林志玲", 178); 61 map.put("杨颖", 165); 62 System.out.println(map); 63 System.out.println("----------------------------"); 64 65 Integer v1 = map.get("杨颖"); 66 System.out.println("v1:" + v1);//165 67 System.out.println("--------------------"); 68 Integer v2 = map.get("赵今麦"); 69 System.out.println(v2);//null 70 } 71 72 /* 73 public V remove(Object key) : 74 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 75 返回值V: 76 key存在,V返回被删除的值 77 key不存在,V返回null 78 */ 79 private static void showRemove() { 80 //创建Map集合额对象 81 HashMap<String, Integer> map = new HashMap<>(); 82 map.put("赵丽颖", 168); 83 map.put("杨幂", 170); 84 map.put("林志玲", 178); 85 map.put("杨颖", 165); 86 System.out.println(map); 87 System.out.println("----------------------------"); 88 89 Integer v1 = map.remove("杨颖"); 90 System.out.println("v1:" + v1); 91 System.out.println(map);//{林志玲=178, 赵丽颖=168, 杨幂=170} 92 //无序的集合,存和取的顺序可能不一致 93 System.out.println("------------------------------"); 94 Integer v2 = map.remove("赵今麦"); 95 System.out.println("v2:" + v2);//null 96 System.out.println(map); 97 } 98 99 /* 100 public V put(K key, V value) : 101 把指定的键与指定的值添加到Map集合中。 102 返回值V: 103 存储键值对的时候,key不重复,返回值v是null; 104 存储键值对的时候,key重复,会使用新的value替换map中重复的value, 105 返回被替换的value 106 */ 107 private static void showPut() { 108 //创建Map集合对象,多态写法 109 HashMap<String, String> map = new HashMap<>(); 110 111 String v1 = map.put("赵丽颖", "杨幂"); 112 System.out.println("v1:" + v1);//v1:null 113 String v2 = map.put("赵丽颖", "杨幂1"); 114 System.out.println("v2:" + v2);//v2:杨幂1 115 116 System.out.println(map);//{赵丽颖=杨幂1} 覆写了toString()方法 117 118 map.put("冷锋", "龙小云"); 119 map.put("杨过", "小龙女"); 120 map.put("金庸", "小龙女"); 121 System.out.println(map);//{杨过=小龙女, 赵丽颖=杨幂1, 金庸=小龙女, 冷锋=龙小云} 122 123 } 124 }
Map集合的第一种遍历方式: 通过键找值的方式
Map集合中的方法: set<k> keySet();
返回映射中包含的键的Set视图
实现步骤:
1、使用Map集合中的keySet();方法,把集合所有的key取出来, 存储到一个Set集合中;
2、遍历Set集合,获取Map集合中的每一个key;
3、通过Map集合中的方法get(key),通过key找到value。
1 package Map集合的学习._3Map集合常用的方法._2遍历集合方式._1键找值的方式; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Set; 6 7 /** 8 * @Author Admin 9 * @Classname DemoMapMethod 10 * @Package Map集合的学习._3Map集合常用的方法 11 * @GreatDate 2020/04/20 22:43:29 12 * @Description TODO Map集合遍历:键找值方式 13 */ 14 public class DemoMapMethod { 15 public static void main(String[] args) { 16 showKeySet(); 17 } 18 19 private static void showKeySet() { 20 //创建Map集合额对象 21 HashMap<String, Integer> map = new HashMap<>(); 22 map.put("赵丽颖", 168); 23 map.put("杨幂", 170); 24 map.put("林志玲", 178); 25 map.put("杨颖", 165); 26 System.out.println(map); 27 System.out.println("----------------------------"); 28 /* 29 1、使用Map集合中的keySet();方法,把集合所有的key取出来, 30 存储到一个Set集合中; 31 */ 32 Set<String> set = map.keySet(); 33 // 2、【使用迭代器】遍历Set集合,获取Map集合中的每一个key; 34 Iterator<String> it = set.iterator(); 35 while (it.hasNext()) { 36 String key = it.next(); 37 Integer value = map.get(key); 38 System.out.println(key + ‘=‘ + value); 39 } 40 System.out.println("-----------------------"); 41 // 2、【使用增强for-each循环】遍历Set集合,获取Map集合中的每一个key; 42 for (String key : set) { 43 Integer value = map.get(key); 44 System.out.println(key + ‘=‘ + value); 45 } 46 } 47 }
Map集合遍历的第二种方式entrySet(): 使用Entry对象遍历
Map集合中的方法:
Set<Map,Entry<k,v>> entrySet();//返回此映射中包含的映射关系的 Set 视图
实现步骤:
1、使用Map集合中的方法entrySet();, 把Map集合中多个Entry对象取出来存储到一个Set 集合中;
2、遍历Set集合,获取每一个Entry对象
1 package Map集合的学习._3Map集合常用的方法._2遍历集合方式._2Entry键值对方式; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Map; 6 import java.util.Set; 7 8 /** 9 * @Author Admin 10 * @Classname DemoMapMethod 11 * @Package Map集合的学习._3Map集合常用的方法._2遍历集合方式._2键值对方式 12 * @GreatDate 2020/04/21 17:24:22 13 * @Description TODO Map集合遍历:Entry键值对对象方式 14 */ 15 public class DemoMapMethod { 16 public static void main(String[] args) { 17 showEntry(); 18 } 19 20 private static void showEntry() { 21 //创建Map集合额对象 22 HashMap<String, Integer> map = new HashMap<>(); 23 map.put("赵丽颖", 168); 24 map.put("杨幂", 170); 25 map.put("林志玲", 178); 26 map.put("杨颖", 165); 27 System.out.println(map); 28 System.out.println("----------------------------"); 29 /* 30 1、使用Map集合中的方法entrySet();,把Map集合中多个Entry对象取出来存储到 31 一个Set集合中; 32 */ 33 Set<Map.Entry<String, Integer>> set = map.entrySet(); 34 //2、【使用迭代器】遍历Set集合,获取每一个Entry对象 35 Iterator<Map.Entry<String, Integer>> it = set.iterator(); 36 while (it.hasNext()) { 37 Map.Entry<String, Integer> entry = it.next(); 38 //3、使用Entry对象中的方法getKey()和getValue()获取键和值 39 String key = entry.getKey(); 40 Integer value = entry.getValue(); 41 System.out.println(key + "=" + value); 42 } 43 System.out.println("-------------------------------"); 44 //2、【使用增强for-each循环】遍历Set集合 45 for (Map.Entry<String, Integer> entry : set) { 46 String key = entry.getKey(); 47 Integer value = entry.getValue(); 48 System.out.println(key + "=" + value); 49 50 } 51 } 52 }
练习题
练习:计算一个字符串中每个字符出现次数
分析:
1.使用Scanner获取用户输入的字符串
2.创建Map集合, key是字符串中的字符, value是字符的个数
3.遍历字符串,获取每一一个字符
4.使用获取到的字符,去Map集合判断key是否存在 key存在:
通过字符(key),获取value(字符个数) value++
put(key, value ) 把新的value存储到Map集合中 key不存在:put(key,1)
1 package Map集合的学习._4Map集合的练习; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Scanner; 6 import java.util.Set; 7 8 /** 9 * @Author Admin 10 * @Classname ExerciseMap 11 * @Package Map集合的学习._4Map集合的练习 12 * @GreatDate 2020/04/22 12:03:56 13 * @Description TODO Map集合综合练习 14 */ 15 /* 16 练习题 17 练习:计算一个字符串中每个字符出现次数分析: 18 1.使用Scanner获取用户输入的字符串 19 2.创建Map集合, key是字符串中的字符, value是字符的个数 20 3.遍历字符串,获取每一一个字符 21 4.使用获取到的字符,去Map集合判断key是否存在 22 key存在:通过字符(key),获取value(字符个数) 23 value++ 24 put(key, value )把新的value存储到Map集合中 25 26 key不存在:put(key,1) 27 5.遍历Map集合,输出结果 28 */ 29 public class ExerciseMap { 30 public static void main(String[] args) { 31 //1.使用Scanner获取用户输入的字符串 32 Scanner sc = new Scanner(System.in); 33 System.out.println("请输入文本:"); 34 String s = sc.next(); 35 //2.创建Map集合, key是字符串中的字符, value是字符的个数 36 HashMap<Character, Integer> map = new HashMap<>(); 37 //3.遍历字符串,获取每一一个字符 38 for (char c : s.toCharArray()) { 39 //4.使用获取到的字符,去Map集合判断key是否存在 40 if (map.containsKey(c)) { 41 //key存在:通过字符(key),获取value(字符个数) 42 // value++ 43 Integer value = map.get(c); 44 value++; 45 map.put(c, value); 46 } else { 47 //key不存在:put(key,1) 48 map.put(c, 1); 49 } 50 } 51 //5.遍历Map集合,输出结果 52 for (Character key : map.keySet()) { 53 Integer value = map.get(key); 54 System.out.println(key + "=" + value); 55 56 } 57 } 58 }
原文:https://www.cnblogs.com/elvin-j-x/p/12817074.html