Java那点儿事之Map集合不为人知的秘密有哪些

网友投稿 190 2022-11-30

Java那点儿事之Map集合不为人知的秘密有哪些

目录前言一、Map二、HashMap的基本概念三、HashMap集合的基本方法与使用四、HashMap集合的遍历五、HashMap集合的综合案例六、总结

前言

上期我们说到了Collection集合,他是单列的集合,分为List集合和Set集合,今天我将继续分析一个双列集合也就是Map,为什么叫他双列集合呢? 往下看,你就知道了。

一、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);

}

}

}

输出结果:

李四

null

=============

张三

王五

李老板

=============

李四

赵六

光头强

四、HashMap集合的遍历

其实遍历无非就是把集合中的元素一个一个给取出来,我们能用,那么在第三部分其实就已经讲到了一种遍历方式,那就是我们去获取键的集合,然后用循环去获取每一个键所对应的值,这样我们就将集合中的每一个元素取出来了。

遍历方式一:根据键的集合找值

步骤分析

- 获取所有键的集合。用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 = map.get(key);

System.out.println(key + "," + value);

}

}

}

输出结果:

杨过,小龙女

郭靖,黄蓉

张无忌,赵敏

那么第二种方法就是我们利用entrySet()方法来获取集合中所有的键值对集合,然后去获取所对的键或值。

HashMap集合遍历方式二:键值对集合找键值对

步骤分析

- 获取所有键值对对象的集合

- Set> entrySet():获取所有键值对对象的集合

- 遍历键值对对象的集合,得到每一个键值对对象

- 用增强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 = 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 HashMapBIfzEf();

for (int i = 0; i < s.length(); i++) {

char key = s.charAt(i);

Integer value = 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)

六、总结

学习集合就应该仔细去了解其特有方法,并注意区分,多实践才能加深明白其中用法,并且应该结合以前学习的知识去理解,可能会有意向不到的收获哦。本期分享到这里结束了,结合上期食用更佳哦,下期再见!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Face Normals & Vertex Normals(面法线跟顶点法线的区别)
下一篇:《cocos2dx手机游戏开发》 源码基于cocos2d-x v2.2 下载
相关文章

 发表评论

暂时没有评论,来抢沙发吧~