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

Java Map

在Java的集合框架中,Map接口用于存储键值对,提供了一种基于键进行查找和操作的数据结构。Map接口的实现类提供了丰富的方法来操作键值对,例如添加、删除、更新和查找。本文将详细介绍Java中的Map接口及其常见实现类,包括HashMap、TreeMap和LinkedHashMap,并提供一些示例代码。

一、Map 概述
Map接口是一个键值对的集合,它继承自Collection接口中的size()和isEmpty()等方法,同时还提供了根据键查找值的方法,以及添加、删除和更新键值对的方法。在Java中,Map接口有几个常见的实现类,每个实现类都具有不同的性能和用途。

HashMap:基于哈希表实现,具有快速的查找和插入操作,适用于需要快速查找键值对的场景。
TreeMap:基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法,适用于需要对键进行排序的场景。
LinkedHashMap:基于哈希表和链表实现,保持键值对的插入顺序,适用于需要保持插入顺序的场景。
二、HashMap
HashMap是Map接口的一个常见实现类,它基于哈希表实现,可以提供快速的查找和插入操作。以下是一些常用的HashMap方法:

put(K key, V value): 将指定的键值对添加到HashMap中。
remove(Object key): 从HashMap中移除指定键的键值对。
get(Object key): 返回指定键对应的值。
containsKey(Object key): 检查HashMap中是否包含指定的键。
containsValue(Object value): 检查HashMap中是否包含指定的值。
size(): 返回HashMap中键值对的数量。

三、TreeMap
TreeMap是Map接口的另一个常见实现类,它基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法。以下是一些常用的TreeMap方法:

put(K key, V value): 将指定的键值对添加到TreeMap中。
remove(Object key): 从TreeMap中移除指定键的键值对。
get(Object key): 返回指定键对应的值。
containsKey(Object key): 检查TreeMap中是否包含指定的键。
size(): 返回TreeMap中键值对的数量。
firstKey(): 返回TreeMap中的第一个键。
lastKey(): 返回TreeMap中的最后一个键。
 

LinkedHashMap是Map接口的另一个实现类,它基于哈希表和链表实现,并保持键值对的插入顺序。以下是一些常用的LinkedHashMap方法:

put(K key, V value): 将指定的键值对添加到LinkedHashMap中。
remove(Object key): 从LinkedHashMap中移除指定键的键值对。
get(Object key): 返回指定键对应的值。
containsKey(Object key): 检查LinkedHashMap中是否包含指定的键。
size(): 返回LinkedHashMap中键值对的数量。

Java中的`Map`接口是一个存储键值对(key-value pairs)的集合,它继承自`Collection`接口。`Map`提供了多种方式来存储和访问键值对数据。以下是对Java中`Map`的一些总结:

1. **接口和实现类**:
   - `Map<K,V>`:定义了映射的基本操作,如`put`、`get`、`remove`等。
   - `SortedMap<K,V>`:继承自`Map`,保证条目根据其键处于有序状态。
   - `NavigableMap<K,V>`:继承自`SortedMap`,支持导航方法,如`lowerEntry`、`higherEntry`等。
   - 常见的实现类包括`HashMap`、`TreeMap`、`LinkedHashMap`、`Hashtable`和`ConcurrentHashMap`。

2. **HashMap**:
   - 基于哈希表的Map接口实现。
   - 允许空键和空值。
   - 不保证映射的顺序。
   - 不是线程安全的,但可以通过`Collections.synchronizedMap`来包装以提供线程安全。

3. **TreeMap**:
   - 基于红黑树的Map接口实现。
   - 按键的自然顺序或自定义Comparator对条目进行排序。
   - 不允许空键,但允许空值。
   - 是线程不安全的。

4. **LinkedHashMap**:
   - 继承自`HashMap`,使用链表维护元素的插入顺序。
   - 可以按插入顺序或访问顺序来遍历键值对。
   - 不是线程安全的。

5. **Hashtable**:
   - 古老的Map实现,类似于`HashMap`,但所有操作都是同步的。
   - 不允许空键和空值。
   - 由于同步操作,通常比`HashMap`慢。

6. **ConcurrentHashMap**:
   - 线程安全的HashMap实现。
   - 通过分段锁机制提高并发性能。
   - 允许空键和空值。

7. **Map的基本操作**:
   - `put(K key, V value)`:如果键已存在,则替换其对应的值。
   - `get(Object key)`:返回指定键所对应的值。
   - `remove(Object key)`:如果存在一个键的映射关系,则将其从映射中移除。
   - `keySet()`:返回映射中包含的键的Set视图。
   - `values()`:返回映射中包含的值的Collection视图。
   - `entrySet()`:返回映射中包含的键值映射关系的Set视图。

8. **Map的遍历**:
   - 可以通过`entrySet()`、`keySet()`或`values()`来遍历Map。

9. **Map的比较**:
   - 两个Map相等当且仅当它们包含相同的键值对。

10. **Map的默认实现**:
    - Java 9引入了`Map.of`和`Map.ofEntries`静态工厂方法,用于创建不可修改的Map。

11. **注意事项**:
    - `Map`的实现类在迭代时对并发修改的响应不同,例如`HashMap`在迭代时允许结构性修改,而`ConcurrentHashMap`则不允许。

12. **性能考虑**:
    - `HashMap`通常提供最快的访问时间,但不是有序的。
    - `TreeMap`提供有序的访问,但访问速度比`HashMap`慢。

这些是Java中`Map`接口及其实现的一些基本总结。每种实现都有其特定的用途和性能特点,选择合适的`Map`实现需要根据具体的应用场景来决定。
 


http://www.kler.cn/a/411503.html

相关文章:

  • Android 11 三方应用监听关机广播ACTION_SHUTDOWN
  • 国土变更调查拓扑错误自动化修复工具的研究
  • C语言-数学基础问题
  • 【CSP CCF记录】201809-2第14次认证 买菜
  • 养老院管理系统+小程序项目需求分析文档
  • 使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统
  • 使用ElementUI中的el-table制作可编辑的表格
  • 做好技术文档的几大要素(按过往经验整理)
  • 二,[ACTF2020 新生赛]Include1感谢 Y1ng 师傅供题。
  • webrtc支持h265
  • OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核
  • 【eNSP】ISIS动态路由协议实验
  • 0分享到机器人扩张工业时代大洗牌Profinet从转ModbusTCP协议网关已收藏
  • 图像处理里的傅里叶变换:原理与代码实现
  • 初阶数据结构之队列的实现
  • 力扣第 67 题 “二进制求和”
  • 零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu
  • 数据结构之栈:从原理到实现
  • 深入解析 ArrayList 源码:从动态扩容到高效存取的秘密
  • IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)
  • OSPF协议整理
  • HTTP 401 和 HTTP 403的区别
  • gitlab ssh-key 绑定
  • 渗透测试笔记—shodan(7完结)
  • Matlab以一个图像分类例子总结分类学习的使用方法
  • 实现钉钉付款申请单到金蝶云星空的全自动集成方案