首页 > Python资料 博客日记
Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)
2024-08-09 06:00:05Python资料围观58次
前言:在Java编程语言中,集合框架(Collection Framework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
先让我们看一下本文大致的讲解内容:
目录
1.Map概念简介
(1)Map的定义
在开始学习如何使用Java中的Map类之前,先让我们了解一下什么是Java中的Map类:
——
Map类
是Java集合框架中的一部分,用于存储键值对(key-value pairs)。每个键(key)对应一个值(value),键是唯一的,但值可以重复。常见的Map
实现类包括HashMap、
LinkedHashMap
、TreeMap。
这里我们也附上官方文档中对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 对应的 value
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// V get(Object key): 返回 key 对应的 value
Integer 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): 判断是否包含 key
boolean containsApple = map.containsKey("apple");
System.out.println("Contains key 'apple': " + containsApple);
// boolean containsValue(Object value): 判断是否包含 value
boolean containsValue2 = map.containsValue(2);
System.out.println("Contains value 2: " + containsValue2);
}
}
这样我们就大致的了解了Java中有关Map的API了!
3.Map的常见实现类
在Java汇总,常见的Map
实现类包括HashMap
、LinkedHashMap
、TreeMap。
(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
实现类取决于具体需求,例如是否需要保证键的顺序或是否需要线程安全。
以上就是本篇文章的全部内容了!!!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj