java学习之路|关于Map集合那些不为人知的秘密
前言
上期我们说到了Collection集合,他是单列的集合,分为List集合和Set集合,今天我将继续分析一个双列集合也就是Map,为什么叫他双列集合呢? 往下看,你就知道了。
文章图片
目录
一、Map
二、HashMap的基本概念
三、HashMap集合的基本方法与使用
四、HashMap集合的遍历
五、HashMap集合的综合案例
六、总结
一、Map Map集合的特点
- 键值对映射关系
- 一个键对应一个值
- 键不能重复,值可以重复
- 元素存取无序
我们通过他的一个实现类HashMap集合来理解
二、HashMap的基本概念 HashMap的定义:
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
文章图片
那么HashMap的键和值的类型可以是String类型,也可以是其他数据的包装类类型,那么说到包装类类型,这里顺便帮大家复习一下包装类类型哦:
文章图片
文章图片
三、HashMap集合的基本方法与使用 学完HashMap集合的基本概念,那么我们怎么去在实际开发过程中去使用他呢?这里我们就要用到他的特有方法了,
以下是HashMap集合的常用方法
文章图片
需要注意的是,Map集合的元素的添加并不是Collection集合的add()方法,而是Put()方法。因为Map集合是键值对集合,那么我们如何获取集合中的每一个元素呢?这里集合也给我们提供了他的元素获取方法:
文章图片
示例代码如下:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
Map集合的获取功能:
V get(Object key):根据键获取值
Set keySet():获取所有键的集合
Collection values():获取所有值的集合
*/
public class MapDemo03 {
public static void main(String[] args) {
Map m = new HashMap();
m.put("张三", "李四");
m.put("王五", "赵六");
m.put("李老板", "光头强");
// V get(Object key):根据键获取值
System.out.println(m.get("张三"));
System.out.println(m.get("张四"));
System.out.println("=============");
//Set keySet():获取所有键的集合
Set s = m.keySet();
for (String i : s) {
System.out.println(i);
}
System.out.println("=============");
//Collection values():获取所有值的集合
Collection c = m.values();
for (String x : c) {
System.out.println(x);
}
}
}
输出结果:
李四四、HashMap集合的遍历 其实遍历无非就是把集合中的元素一个一个给取出来,我们能用,那么在第三部分其实就已经讲到了一种遍历方式,那就是我们去获取键的集合,然后用循环去获取每一个键所对应的值,这样我们就将集合中的每一个元素取出来了。
null
=============
张三
王五
李老板
=============
李四
赵六
光头强
遍历方式一:根据键的集合找值
步骤分析
- 获取所有键的集合。用keySet()方法实现
- 遍历键的集合,获取到每一个键。用增强for实现
- 根据键去找值。用get(Object key)方法实现
代码实现
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
/*
Map集合的遍历(方式1):
1:获取所有键的集合。用keySet()方法实现
2:遍历键的集合,获取到每一个键。用增强for实现
3:根据键去找值。用get(Object key)方法实现
*/
public class MapDemo01 {
public static void main(String[] args) {
//创建集合对象
Map map = new HashMap();
//添加元素
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
//1:获取所有键的集合。用keySet()方法实现
Set keySet = map.keySet();
for (String key : keySet) {
String value = https://www.it610.com/article/map.get(key);
System.out.println(key +"," + value);
}}
}
【java学习之路|关于Map集合那些不为人知的秘密】输出结果:
杨过,小龙女那么第二种方法就是我们利用entrySet()方法来获取集合中所有的键值对集合,然后去获取所对的键或值。
郭靖,黄蓉
张无忌,赵敏
HashMap集合遍历方式二:键值对集合找键值对
步骤分析
- 获取所有键值对对象的集合
- Set
- 遍历键值对对象的集合,得到每一个键值对对象
- 用增强for实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
- 用getKey()得到键
- 用getValue()得到值
代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
Map集合的遍历(方式2):
1:获取所有键值对对象的集合
Set> entrySet():获取所有键值对对象的集合
2:遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry
3:根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
*/
public class MapDemo02 {
public static void main(String[] args) {
//创建集合对象
Map map = new HashMap();
//添加元素
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
//1:获取所有键值对对象的集合
Set me = map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象
for (Map.Entry e : me) {
String key = e.getKey();
String value = https://www.it610.com/article/e.getValue();
System.out.println(key +"," + value);
}}
}
输出结果:
杨过,小龙女两种遍历方式都是很实用,各位大佬在开发中愿意用哪种都是可以的哦。
郭靖,黄蓉
张无忌,赵敏
五、HashMap集合的综合案例 有道是:与其临渊羡鱼,不如退而结网。看了那么 多理论的东西不自己动手去实践一下,那么鱼儿永远在鱼塘,知识永远在电脑里,接下来就让我们一起动手做一道题,来加深一下印象。
案例需求:
案例需求
- 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
- 举例:键盘录入“aababcabcdabcde”在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
思路解析:代码实例:
1:键盘录入一个字符串
2:创建HashMap集合,键是Character,值是Integer
3:遍历字符串,得到每一个字符
4:拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
5:遍历HashMap集合,得到键和值,按照要求进行拼接
6:输出结果
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
/*
需求:
键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)”思路:
1:键盘录入一个字符串
2:创建HashMap集合,键是Character,值是Integer
3:遍历字符串,得到每一个字符
4:拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
5:遍历HashMap集合,得到键和值,按照要求进行拼接
6:输出结果
*/
public class HashMapDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
HashMap hm = new HashMap();
for (int i = 0;
i < s.length();
i++) {
char key = s.charAt(i);
Integer value = https://www.it610.com/article/hm.get(key);
if (value == null) {
hm.put(key, 1);
} else {
value++;
hm.put(key, value);
}
}StringBuilder sb = new StringBuilder();
Set keySet = hm.keySet();
for (Character key1 : keySet) {
Integer values = hm.get(key1);
sb.append(key1).append("(").append(values).append(")");
}
String result = sb.toString();
System.out.println(result);
}
}
输出结果:
请输入一个字符串:六、总结 学习集合就应该仔细去了解其特有方法,并注意区分,多实践才能加深明白其中用法,并且应该结合以前学习的知识去理解,可能会有意向不到的收获哦。本期分享到这里结束了,结合上期食用更佳哦,下期再见!
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)
文章图片
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 事件代理
- 一起来学习C语言的字符串转换函数
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树