当前位置: 首页 > news >正文

Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)

        前言:在Java编程语言中,集合框架(Collection Framework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

先让我们看一下本文大致的讲解内容:

目录

1.Map概念简介

        (1)Map的定义

        (2)Map.Entry的说明,>

        (3)Map类在Java集合类中的关系

2.Map接口中常用API

3.Map的常见实现类

        (1)HashMap

        (2)LinkedHashMap

        (3)TreeMap

4.Map的实际案例

5.总结


1.Map概念简介

        (1)Map的定义

        在开始学习如何使用Java中的Map类之前,先让我们了解一下什么是Java中的Map类:

         ——Map类是Java集合框架中的一部分,用于存储键值对(key-value pairs)。每个键(key)对应一个值(value),键是唯一的,但值可以重复。常见的Map实现类包括HashMap、LinkedHashMapTreeMap。

        这里我们也附上官方文档中对Map的解释:Map (Java Platform SE 8 )

        我相信读者如果初次学习Java中的Map类的话,可能对上面对Java中Map类的解释不能很好的理解,不过没有关系,读者继续向下阅读即可。

        (2)Map.Entry<K, V>的说明

        对于Map这种数据结构而言,其底层可以简单的理解为是由一个个节点进行构成的的树,而Map.Entry<K, V>就是其每一个节点。

        对于Map.Entry<K, V>来说,其是Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式:

方法解释
K getKey()返回 entry 中的 key
V getValue()返回 entry 中的 value
V setValue(V value)将键值对中的value替换为指定value

        (3)Map类在Java集合类中的关系

        了解了Map的定义与Map.Entry<K, V>之后,在让我们看看Map在Java集合类中的关系,如下图:

从图中我们可以看出,Map类不在实现Collection接口,而是实现Map自身接口。

        ——通关上边的学习了解之后,这样我们就大致的了解了Java中的Map究竟是什么东西了。

2.Map接口中常用API

        Map接口提供了一些基本的方法,用于操作键值对。以下是Map接口的主要方法:

方法解释
V get(Object key)返回 key 对应的 value
V getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值
V put(K key, V value)设置 key 对应的 value
V remove(Object key)删除 key 对应的映射关系
Set<K> keySet()返回所有 key 的不重复集合
Collection<V> values()返回所有 value 的可重复集合
Set<Map.Entry<K, V>> entrySet()返回所有的 key-value 映射关系
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value

这里我们对上述方法进行逐一使用代码进行解释:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Collection;public class MapMethodsExample {public static void main(String[] args) {// 创建一个 HashMap 实例Map<String, Integer> map = new HashMap<>();// V put(K key, V value): 设置 key 对应的 valuemap.put("apple", 1);map.put("banana", 2);map.put("orange", 3);// V get(Object key): 返回 key 对应的 valueInteger appleValue = map.get("apple");System.out.println("Value for 'apple': " + appleValue);// V getOrDefault(Object key, V defaultValue): 返回 key 对应的 value,key 不存在,返回默认值Integer mangoValue = map.getOrDefault("mango", 0);System.out.println("Value for 'mango': " + mangoValue);// V remove(Object key): 删除 key 对应的映射关系Integer removedValue = map.remove("banana");System.out.println("Removed value for 'banana': " + removedValue);System.out.println("Map after removing 'banana': " + map);// Set<K> keySet(): 返回所有 key 的不重复集合Set<String> keys = map.keySet();System.out.println("Keys: " + keys);// Collection<V> values(): 返回所有 value 的可重复集合Collection<Integer> values = map.values();System.out.println("Values: " + values);// Set<Map.Entry<K, V>> entrySet(): 返回所有的 key-value 映射关系Set<Map.Entry<String, Integer>> entries = map.entrySet();System.out.println("Entries: " + entries);// boolean containsKey(Object key): 判断是否包含 keyboolean containsApple = map.containsKey("apple");System.out.println("Contains key 'apple': " + containsApple);// boolean containsValue(Object value): 判断是否包含 valueboolean containsValue2 = map.containsValue(2);System.out.println("Contains value 2: " + containsValue2);}
}

        这样我们就大致的了解了Java中有关Map的API了!

3.Map的常见实现类

        在Java汇总,常见的Map实现类包括HashMapLinkedHashMapTreeMap。

        (1)HashMap

   HashMap是最常用的Map实现类,基于哈希表实现。它允许使用null键和null值,但不保证映射的顺序。其主要特点包括:

  • 线程不安全:多个线程同时访问时需要手动同步。
  • 无序:不保证键值对的插入顺序。
  • 高效:大多数操作的时间复杂度为O(1)。

以下为其代码演示:

import java.util.HashMap;
import java.util.Map;public class HashMapExample {public static void main(String[] args) {Map<String, Integer> hashMap = new HashMap<>();// 添加键值对hashMap.put("Apple", 10);hashMap.put("Banana", 20);hashMap.put("Orange", 30);hashMap.put("Apple", 40); // 重复键将覆盖之前的值// 获取值int value = hashMap.get("Apple");System.out.println("Value for 'Apple': " + value);// 判断是否包含键boolean containsKey = hashMap.containsKey("Banana");System.out.println("Contains key 'Banana': " + containsKey);// 判断是否包含值boolean containsValue = hashMap.containsValue(20);System.out.println("Contains value 20: " + containsValue);// 遍历键值对for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}// 删除键值对hashMap.remove("Orange");// 清空映射hashMap.clear();// 判断是否为空boolean isEmpty = hashMap.isEmpty();System.out.println("Is empty: " + isEmpty);}
}

        (2)LinkedHashMap

    LinkedHashMap继承自HashMap,并且在内部使用双向链表维护键值对的插入顺序。因此LinkedHashMap是有序的Map实现类。其主要特点包括:

  • 维护插入顺序或访问顺序。
  • 其他特性与HashMap相同。

以下为其代码演示:

import java.util.LinkedHashMap;
import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> linkedHashMap = new LinkedHashMap<>();// 添加键值对linkedHashMap.put("Apple", 10);linkedHashMap.put("Banana", 20);linkedHashMap.put("Orange", 30);linkedHashMap.put("Apple", 40); // 重复键将覆盖之前的值// 遍历键值对for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

        (3)TreeMap

    TreeMap是基于红黑树实现的有序Map,它的键按照自然顺序或自定义比较器的顺序排序。其主要特点包括:

  • 保证键的排序顺序。
  • 其他特性与HashMap相似,但TreeMap的操作时间复杂度为O(log n)。

以下为其代码演示:

import java.util.Map;
import java.util.TreeMap;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> treeMap = new TreeMap<>();// 添加键值对treeMap.put("Apple", 10);treeMap.put("Banana", 20);treeMap.put("Orange", 30);treeMap.put("Apple", 40); // 重复键将覆盖之前的值// 遍历键值对for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

这样我们就大致的了解了Map中常见实现类了!

4.Map的实际案例

        在学习完了Map概念简介、Map接口中常用API与Map的常见实现类之后,现在让我们看一下使用Map的实际案例来进一步加深对Java中Map类的理解:

        以下示例展示了如何使用Map统计一段文本中每个单词出现的频率:

import java.util.HashMap;
import java.util.Map;public class WordFrequency {public static void main(String[] args) {String text = "This is a sample text. This text is for demonstration purposes.";// 统计单词频率Map<String, Integer> wordCount = new HashMap<>();String[] words = text.split("\\s+");for (String word : words) {word = word.toLowerCase().replaceAll("[^a-zA-Z]", "");if (!word.isEmpty()) {wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);}}// 打印结果for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

        ——这样我们即完成了对一段文本中每个单词出现的次数的统计。

5.总结

        Map接口及其实现类在Java编程中扮演着重要角色。通过本文的介绍,相信读者能更好地理解Map的概念、常用方法及其在实际应用中的使用。HashMap提供了高效但无序的存储,LinkedHashMap维护插入顺序,TreeMap提供了有序存储。

        选择合适的Map实现类取决于具体需求,例如是否需要保证键的顺序或是否需要线程安全。


以上就是本篇文章的全部内容了!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【过题记录】 8.3
  • CTFHUB-SSRF-DNS重绑定 Bypass
  • [米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-01 以太网协议介绍
  • ai web 1.0靶机漏洞渗透详解
  • 搭建个人的金融系统-----第一章,数据库设计
  • Arch Linux - 2-安装中文输入法
  • 解析 C# Dictionary 代码
  • Comfyui实例容器运行横向扩展
  • 【ROS 最简单教程 003/300】ROS 快速体验:Hello World
  • C# Where关键字
  • 数学建模--蒙特卡罗随机模拟
  • 嵌入式Linux系统中pinictrl框架基本实现
  • 数学建模--禁忌搜索
  • Kafka操作
  • 现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响
  • [deviceone开发]-do_Webview的基本示例
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【翻译】babel对TC39装饰器草案的实现
  • Android Volley源码解析
  • Android系统模拟器绘制实现概述
  • C++类的相互关联
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • js作用域和this的理解
  • Laravel5.4 Queues队列学习
  • Phpstorm怎样批量删除空行?
  • Shadow DOM 内部构造及如何构建独立组件
  • SpringCloud集成分布式事务LCN (一)
  • 浮现式设计
  • 力扣(LeetCode)357
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • mysql面试题分组并合并列
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 职场生活之道:善于团结
  • #pragma multi_compile #pragma shader_feature
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (07)Hive——窗口函数详解
  • (19)夹钳(用于送货)
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (论文阅读30/100)Convolutional Pose Machines
  • .JPG图片,各种压缩率下的文件尺寸
  • .Net 知识杂记
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET连接数据库方式
  • .NET中两种OCR方式对比
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /etc/sudoers (root权限管理)
  • @ModelAttribute使用详解