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

Java集合学习之Map

1.什么是Map

Java里的Map接口是一个集合根接口,表示一个 键值对(Key-Value) 的映射。

简单来说就是键和值是一对的,每一个 Key都有唯一确定的 Value对应。

其中要求 键(Key) 唯一,因为是按照Key去找Value的,如果Key重复,就找不到应该是对应的哪一个Value。

举一个简单的例子就是,每一个学号对应一位学生,那学号与学生姓名就是一对键值对,学号为键,学生为值,学号不能重复,学生姓名可以重复。

因此,Map最重要的特性就是去重,Set底层使用的就是Map集合。

2.Java中的Map

Java中的Map集合是和Collection接口同一等级的集合根接口。
Java集合

2.1 Java中的Map接口

Map 的三个 collection 视图

可以从 Keyset, Values, Entry三个角度来分析Java中的Map接口。

2.1.1 Keyset

KeySet 是一个 Map 中键(key)的集合,以 Set 的形式保存,不允许重复,因此键存储的对象需要重写 equals() 和 hashCode() 方法。

在上图就是保存 AA, BB, CC, DD… 等键的集合,也就是左边的那一列。

可以通过 Map.keySet() 方法获得。

2.1.2 Values

Values 是一个 Map 中值 (value) 的集合,以 Collection 的形式保存,因此可以重复。

在上图就是保存 90,90,56,78… 等值的集合,也就是右边那一列。

通过 Map.values() 方法获得。

2.1.3 Entry

Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射,例如上图中 AA-90 这一组映射关系。

Entry

Entry 具有上图中的方法:

  • getKey() , 获取这组映射中的键 key
  • getValue() , 获取这组映射中的值 value
  • setValue() ,修改这组映射中的值
  • hashCode() , 返回这个 Entry 的哈希值
  • equals() , 对比 key-value 是否相等

通过 Map.entrySet() 方法获得的是一组 Entry 的集合,保存在 Set 中,所以 Map 中的 Entry 也不能重复。

public Set<Map.Entry<K,V>> entrySet();

3.Map 的实现类

Map体系的继承树
Map 的实现类主要有 4 种:

  • Hashtable
    • 古老,线程安全
  • HashMap
    • 速度很快,但没有顺序
  • TreeMap
    • 有序的,效率比 HashMap 低
  • LinkedHashMap
    • 结合 HashMap 和 TreeMap 的有点,有序的同时效率也不错,仅比 HashMap 慢一点

其中后三个的区别很类似 Set 的实现类:

  • HashSet
  • TreeSet
  • LinkedHashSet
    Map 的每个实现类都应该实现 2 个构造方法:
  1. 无参构造方法,用于创建一个空的 map
  2. 参数是 Map 的构造方法,用于创建一个包含参数内容的新 map

第二种构造方法允许我们复制一个 map。

虽然没有强制要求,但自定义 Map 实现类时最好都这样来。

参考链接

Java 集合深入理解(14):Map 概述

【Java】Map介绍和使用

Java :集合(4)——Map 用法详解

http://www.lryc.cn/news/13293.html

相关文章:

  • java 基于maven多模块合并打包部署
  • Kubernetes是个什么东东?
  • 【go语言grpc之client端源码分析三】
  • Android 基础知识4-2.6LinearLayout(线性布局)
  • 补充前端面试题(三)
  • .net开发安卓入门-自动升级(配合.net6 webapi 作为服务端)
  • 分享111个HTML艺术时尚模板,总有一款适合您
  • spring之Spring AOP基于注解
  • LeetCode题目笔记——6362. 合并两个二维数组 - 求和法
  • 【C#基础】C# 常用语句讲解
  • 腾讯云——负载均衡CLB
  • 6.关于系统服务的思考—— native vs java
  • SQL语句创建视图:
  • 使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)
  • JavaWeb9-volatile解决内存可见性和指令重排序问题
  • Docker - 镜像操作命令
  • 全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记
  • Tomcat 线上调优记录
  • 学习 Python 之 Pygame 开发坦克大战(四)
  • New和Malloc的使用及其差异
  • 2023年细胞生物学复习汇总
  • 光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统MATLAB仿真
  • 高可用 - 02 Keepalived_VRRP工作原理
  • vue实现xml在线编辑功能
  • GitHub Workflow
  • vue学习
  • Windows使用ssh协议远程连接ubuntu linux系统
  • 大数据处理 - Overview
  • 12-Composer的配置与使用详解
  • RK3566开启wifi自适应