在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map。

Map 接口定义的集合又称查找表,用于存储所谓“Key-Value”映射对,Key 可以看成是 Value 的索引,作为 Key 的对象在集合中不可以重复。

根据内部数据结构的不同,Map 接口有多种实现类,其中常用的有内部为 hash 表实现的 HashMap 和内部为排序二叉树实现的 TreeMap,在开发过程中我们常用到的是 Hashmap。

 import java.util.HashMap;
import java.util.Map; /**
* java.util.Map
* Map 看起来像是一个多行两列的表格
* 以 key-value 对的形式存放元素
* 以 Map 中 key 不允许重复(重复是依靠 key 的 equals 判断)
* 常用的实现类为 HashMap
*/
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
/**
* V put(K k, V v)
* 将给定的 key-value 对存入 Map
* 顺序不按照给定的顺序排
* 由于 Map 要求 key 不允许重复,所以使用 Map
* 已有的 key 存入一个新的 value 时的操作是
* 替换 value,那么返回值为该 key 原来对应的 value,
* 若是一个新的 key,则返回为 null
*/
map.put("语文", 90);
map.put("数学", 93);
map.put("英语", 80);
map.put("化学", 99);
System.out.println(map); // {数学=93, 化学=99, 语文=90, 英语=80} Integer value = map.put("物理", 60); // 新 key,返回 null
System.out.println(value); // null
System.out.println(map); // {物理=60, 数学=93, 化学=99, 语文=90, 英语=80} value = map.put("语文", 88); // key 相同替换原来的 value
System.out.println(value); //
System.out.println(map); // {物理=60, 数学=93, 化学=99, 语文=88, 英语=80} /**
* V get(K k)
* 根据给定的 key 获取对应的 value
* 若当前 Map 中没有给定的 key,则返回为 null
*/
value = map.get("数学");
System.out.println(value); //
value = map.get("生物");
System.out.println(value); // null /**
* V remove(K k)
* 删除给定的 key 所对应的 key-value 对
* 返回值为被删除的 key-value 对中的 value
*/
value = map.remove("数学");
System.out.println(value); //
System.out.println(map); // {物理=60, 化学=99, 语文=88, 英语=80}
}
}

在上面的代码中,我们实现了 Map 的基本操作增删改查。接下来我们再来看一下 Map 的循环遍历:

 import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* 遍历 Map
* 遍历 Map 有三种方式:
* 遍历所有的 key
* 遍历所有的 key-value 对
* 遍历所有的 value(相对不常用)
*/
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("语文", 90);
map.put("数学", 93);
map.put("英语", 80);
map.put("化学", 99);
System.out.println(map.size()); //
System.out.println(map); // {数学=93, 化学=99, 语文=90, 英语=80} /**
* 遍历所有的 key
* Set<K> keySet()
* 该方法会将当前 Map 中所有的 key 存入一个Set 集合后返回
* 那么遍历该集合就等于遍历了所有的 key
*/
Set<String> keySet = map.keySet();
for (String string : keySet) {
System.out.println(string); // 数学 化学 语文 英语
} /**
* 遍历每一组键值对
* Map 中每一组键值对都是由 Map 的内部类:
* java.util.Map.Entry 的一个实例表示的
* Entry 有两个方法:getKey,getValue
* 可以分别获取这一组键值对中的 key 与 value
*
* set<Entry> entrySet
* 该方法会将 Map 中每一组键值对(Entry 实例)
* 存入一个 Set 集合后返回
*/
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ": " + value); // 数学: 93, 化学: 99, 语文: 90, 英语: 80
} /**
* 遍历所有的 value
* Collection values
* 该方法会将当前 Map 中所有的 value 存入一个集合后返回
*/
Collection<Integer> values = map.values();
for (Integer value : values) {
System.out.println(value); // 93 99 90 80
}
}
}

在上面的代码中,我们实现了 Map 的遍历循环。

Java 从入门到进阶之路(二十七)的更多相关文章

  1. Java 从入门到进阶之路(十七)

    在之前的文章我们介绍了一下 Java 中类的内部类,本章我们来看一下 Java 中的正则表达式. 在任何一种语言中,都绕不开正则表达式,而且大部分语言的正则表达式都有预定义的字符集,且预定义的字符集也 ...

  2. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  3. Java 从入门到进阶之路(二十三)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的迭代器 Iterator,本章我们来看一下 Java 集合框架中的Collection 的泛型. 在讲泛型之前我们先来 ...

  4. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  5. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  6. Java 从入门到进阶之路(二十一)

    在之前的文章我们介绍了一下 Java 中的日期操作,本章我们来看一下 Java 集合框架中的Collection. 早在 Java 2 中之前,Java 就提供了特设类.比如:Dictionary, ...

  7. Java 从入门到进阶之路(二十二)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...

  8. Java 从入门到进阶之路(二十四)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的泛型,本章我们来看一下 Java 集合框架中的Collection 的子接口 List. Collection 接口有 ...

  9. Java 从入门到进阶之路(二十五)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...

  10. Java 从入门到进阶之路(二十六)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue. 在之前我们讲 ...

随机推荐

  1. Java实现蓝桥杯模拟空地长草

    问题描述 小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1. 小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地. 这些草长得很快,每个月,草都会向外长出一 ...

  2. Java实现 LeetCode 201 数字范围按位与

    201. 数字范围按位与 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入 ...

  3. Java实现 蓝桥杯 基因牛的繁殖

    基因牛的繁殖 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛.如此循环下去,请问张教授n年后有多少头母牛? 以下程序模拟了这 ...

  4. 第五届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍" ...

  5. Java实现 蓝桥杯 历届试题 矩阵翻硬币

    问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所有第 ix 行,第 jy 列的硬币进行翻转. 其 ...

  6. Dockerfile 解析

    Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列参数和命令构成的脚本. 构建的三个步骤:1.编写Dockerfile文件  2.docker build  3 ...

  7. PAT A除以B

    本题要求计算A/B,其中A 是不超过 1000 位的正整数,B 是 1 位正整数.你需要输出商数Q 和余数R,使得 A=B*Q+R 成立. 输入格式: 输入在一行中依次给出A 和B,中间以 1 空格分 ...

  8. 使用dotnet Cli向nuget发布包

    长话短说, 今天分享如何在nuget.org创建并发布.NET Standard package. 前置 安装勾选.NET Core开发套件的Visual Studio; 安装dotnet Cli 从 ...

  9. akka-typed(6) - cluster:group router, cluster-load-balancing

    先谈谈akka-typed的router actor.route 分pool router, group router两类.我们先看看pool-router的使用示范: val pool = Rout ...

  10. FR嵌套报表(Nested Report)

    //主界面只是说明放置了哪些东西(3个ADOQuery不必放): //MasterSource.MasterField的设置如下: 1) Customer.Orders.Items 的 MasterS ...