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。