J2EE集合框架之Map
1.什么是Map集合
1.1 概述:
- Map是一种键值对(key-value)的集合,Map集合中每一个元素都包含一个键对象和一个值对象,其中键Key对象不允许重复,而值Value对象可以重复。
- Map集合没有继承Collection接口,其提供的是key到value的映射,Map中不能包含相同的key值,每个key只能影射一个相同的value,key值还决定了存储对象在映射中的存储位置。
1.2 图解:
1.3 Map集合和Collection集合的区别:
- 数据结构:Collection集合主要是由一组单一类型的对象构成,而Map集合是由键值对(key-value)构成的对象组成。
- 元素的排序:Collection集合中的元素是无序的,而Map集合的键值对是按照某种顺序进行排列的。
- 元素的访问方式:Collection集合只能按照特定的顺序依次读取元素,而Map集合可以通过键直接访问元素。
- 元素的重复:Collection集合中允许有重复的元素,而Map集合不允许有重复的键。
- 方法:Collection集合主要包括增加、删除、修改、查找等操作方法,而Map集合除此之外还包括获取键、获取值、获取键值对等相关方法。
**总结:**相比较两种集合类型,Collection集合更适合和与存储较为简单的数据对象,这样的话可以大大提高开发效率;而相对于Map集合更适合保存键值对(key-value)这种特殊形式的数据,对于这种特殊形式数据的话Map更方便。
2. Map集合的遍历方式:(未包括泛型)
2.1 先获取map集合的所有key再获取值
package com.YX.Map; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo1 { public static void main(String[] args) { Map map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 1.先获取map集合的键,在获取值 Set keyset = map.keySet(); for (Object key : keyset) { System.out.println("key:" + key + ";value=" + map.get(key)); } } }
输出结果
2.2 得到map集合的映射关系
package com.YX.Map; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Demo1 { public static void main(String[] args) { Map map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 2.得到map集合的映射关系 Set entrySet = map.entrySet(); for (Object object : entrySet) { Map.Entry entry = (Entry) object; System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
输出结果:
3.Map集合的遍历方式:(包括泛型)
3.1 增强for循环遍历(foreach)
package com.YX.Map; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class Demo2 { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 1.foreach遍历 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
输出结果
3.2 迭代器遍历iterator
package com.YX.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Demo2 { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); 1.foreach遍历 // for (Map.Entry<Integer, String> entry : map.entrySet()) { // System.out.println(entry.getKey() + ": " + entry.getValue()); // } // 2.迭代器遍历 Iterator<Entry<Integer, String>> it = map.entrySet().iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
输出结果
3.3 遍历键、值、或者键值对的集合:
package com.YX.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Demo2 { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 3.遍历键、值、或者键值对的集合: // 可以使用Map集合的keySet()、values()、entrySet()方法获得键、值、或者键值对的集合,然后使用for-each循环或迭代器遍历。 // 遍历键值对 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
输出结果
4. Map集合的基本使用(增删改查)
package com.YX.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Demo3 { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 原来数据 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } // 根据对应的键来覆盖对应的值。 map.put(1, "俊逸"); // 修改后的结果 System.out.println("修改后的======================================================================="); for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
修改后输出集合的结果
package com.YX.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Demo3 { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "君易"); map.put(2, "木易"); map.put(3, "栀龍"); // 原来数据 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } // 根据对应的键来删除对应的数据。 map.remove(1); // 删除后的结果 System.out.println("删除后的======================================================================="); for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
输出结果
5.Map集合的综合运用(统计字符串中的字符出现的次数)
package com.YX.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Demo3 { public static void main(String[] args) { // 定义一个字符串 String str = "fghjhbvsccsc"; // 截取每一个字符到字符数组中 char[] charArray = str.toCharArray(); // 存放字符与出现次数对应关系的Map集合容器 Map<Character, Integer> map = new HashMap<Character, Integer>(); for (char c : charArray) {// foreach遍历字符数组 Integer val = map.get(c);//定义变量代表出现次数 if (val != null) {//判断次数不能为空 map.put(c, val + 1);//如果字符重复了则该次数加1 } else { map.put(c, 1);//如果字符没重复则次数默认为1。 } } // 遍历Map集合 for (Entry<Character, Integer> entry:map.entrySet()) { System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次"); } } }
显示结果
**总结:**先将一个字符串截取一个个的字符存储在字符数组中,然后定义一个Map集合存储对应的字符和出现的次数,其次遍历字符数组判断截取的每一个字符是否重复出现,如果有重复出现的则将次数+1,若没有则将次数默认设置为1。