map相关接口(map接口、HashMap、LinkedHashMap、TreeMap)

news2024/9/30 21:23:51

Java知识点总结:想看的可以从这里进入

目录

      • 8.3、map结构
        • 8.3.1、 map接口
        • 8.3.2、HashMap
        • 8.3.3、LinkedHashMap
        • 8.3.4、TreeMap

8.3、map结构

8.3.1、 map接口

map的集合是以键值对的形式存在的 (key-value),每个键只能对应一个值,通常通过键去查找值,所以键是唯一的不可重复,而值则没有限制(键和值可以是任何引用类型的数据,但是键最常用的是String类型)

image-20220301180109447
方法:
1、int size():返回map中key-value对的个数
2、boolean isEmpty():判断当前map是否为空
3、boolean containsKey(Object key):判断一个键是否存在
   boolean containsValue(Object value):判断一个值是否存在
4、V get(Object key):根据key获取值
5、V put(key,value):添加一个键值对元素(如果该键已存在,则更改其value值)
   void putAll(map2):将map2中的所有键值添加
6、V remove(Object key):根据键移除一个键值对元素
7、void clear():清空
8、Set<K> keySet():将所有的键放到set集合中
9、Collection<V> values():将值放到Collection集合中
10、Set<Map.Entry<K, V>> entrySet():返回map中键值的映射集合到set中,key=value形式
11、int hashCode():返回哈希吗
12、boolean equals(Object o):当哈希码相同的时候,使用equals判断

image-20230216160206988

8.3.2、HashMap

HashMap链接

8.3.3、LinkedHashMap

LinkedHashMap 是 HashMap 的子类,它在HashMap的基础上增加了双向链表的结构可以通过双向链表记录数据的插入顺序,与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致。他对HashMap中的一些方法进行了重写,让所有对底层HashMap数据结构修改的同时也对该链表进行修改,遍历的时候便是遍历这一条有序的链表。(主要是在HashMap方法的基础上,添加了一些双向链表的操作,其他的特性基本没有更改)

image-20230217151443264 image-20230217151506621

在LinkedHashMap 中有一个属性 accessOrder,它控制LinkedHashMap的排序方式,如果它为false时,是按照插入顺序来排序的,但是设置了accessOrder = true 时,则在调用get()方法时,会因为 if(accessOrder == true ) 而调用afterNodeAccess方法来调整顺序。基于get()在accessOrder为true时,会将访问到的元素放到链表的最后的特性,可以使用LinkedHashMap实现LRU缓存。

image-20230217151526312 image-20230217151853089 image-20230217152059377

8.3.4、TreeMap

基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。它可以保证所有的 Key-Value 对处于有序状态。

TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。

同样它排序也是依据Comparable 和 Comparator 实现的:

  1. 自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException
  2. 定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现Comparable 接口
使用其键的自然顺序构造一个新的空树图。插入所有键都必须实现Comparable接口
public TreeMap() {
    comparator = null;
}

造一个新的空树图,根据给定的比较器排序。插入映射中的所有键必须由给定的比较器相互比较
public TreeMap(Comparator<? super K> comparator) {
    this.comparator = comparator;
}

构造一个新的树映射,包含与给定映射相同的映射,根据其键的自然顺序排序。插入到新映射中的所有键都必须实现Comparable接口。
public TreeMap(Map<? extends K, ? extends V> m) {
    comparator = null;
    putAll(m);
}

构造一个包含相同映射并使用与指定排序映射相同顺序的新树映射。该方法以线性时间运行。
public TreeMap(SortedMap<K, ? extends V> m) {
    comparator = m.comparator();
    try {
        buildFromSorted(m.size(), m.entrySet().iterator(), null, null);
    } catch (java.io.IOException | ClassNotFoundException cannotHappen) {
    }
}
1、int size():返回此映射中键值映射的数量。
2、boolean containsKey(Object key):判断key是否存在
   boolean containsValue(Object value):判断值是否存在
3、V get(Object key):根据key获取值
   K firstKey():获取第一个key
   K lastKey():获取最后一个key
   Map.Entry<K, V> firstEntry():返回该TreeMap的第一个(最小的)映射
   Map.Entry<K, V> lastEntry():返回该TreeMap的最后一个(最大的)映射
   SortedMap<K, V> headMap(K toKey):返回该TreeMap中严格小于指定key的映射集合
   SortedMap<K, V> subMap(K fromKey, K toKey):返回该TreeMap中指定范围的映射集合(大于等于fromKey,小于toKey)
4、putAll(Map<? extends K, ? extends V> map):将指定映射中的所有映射复制到此映射。
   V put(K key, V value) :添加元素
5、void clear():清空TreeMap中的所有元素
6、V remove(Object key):从TreeMap中移除指定key对应的映射
7、V replace(K key, V value):替换指定key对应的value值
   boolean replace(K key, V oldValue, V newValue):当指定key的对应的value为指定值时,替换该值为新值
8、Collection<V> values():返回由该TreeMap中所有的values构成的集合
   Set<Map<K, V>> entrySet():返回由该TreeMap中的所有映射组成的Set对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么表单设计工具能快速提升办公效率?

在信息化快速发展的年代&#xff0c;谁能掌握更先进的技术&#xff0c;谁就能拥有更广阔的发展前景。在以前的办公环境中&#xff0c;传统的表单制作工具占据了主流地位&#xff0c;随着办公自动化的快速发展&#xff0c;传统表单工具的弊端也暴露出来了&#xff0c;采用更先进…

m0n0wall防火墙(10)

实验目的 1、深入理解防火墙的功能和工作原理&#xff1b; 2、熟悉软件防火墙&#xff0c;掌握m0n0防火墙的规则和配置。预备知识 m0n0wall M0n0wall是基于FreeBSD内核开发的免费软件防火墙。m0n0wall提供基于web的配置管理、提供VPN功能、支持DHCP Server、DNS转发、动态DNS…

maddpg 复现过程中遇到的问题

最近在复现论文Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments https://github.com/openai/multiagent-particle-envshttps://github.com/philtabor/Multi-Agent-Deep-Deterministic-Policy-Gradients.gitGitHub - philtabor/Multi-Agent-Deep-Dete…

windows配置c语言编译系统-wingw gcc cmake

前言 笔者在做嵌入式mcu编程的时候&#xff0c;有时候想要验证一下部分代码的功能&#xff0c;需要先编译成bin文件&#xff0c;然后烧录到mcu内执行。每次编译烧录运行耗时较久。于是想到是不是可以在电脑上配置一个c的编译环境&#xff0c;来验证一些与硬件不相干的代码。验…

idea多时编辑多行-winmac都支持

1背景介绍 idea编辑器非常强大&#xff0c;其中一个功能非常优秀&#xff0c;很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后&#xff0c;可以直接多行编辑。 优点&a…

jsp物品找回系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 物品找回系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用j…

一文搞定python语法进阶

前言前面我们已经学习了Python的基础语法&#xff0c;了解了Python的分支结构&#xff0c;也就是选择结构、循环结构以及函数这些具体的框架&#xff0c;还学习了列表、元组、字典、字符串这些Python中特有的数据结构&#xff0c;还用这些语法完成了一个简单的名片管理系统。下…

Java基础-类加载器

写在前面的话&#xff1a; 基础加强包含了&#xff1a; 反射&#xff0c;动态代理&#xff0c;类加载器&#xff0c;xml&#xff0c;注解&#xff0c;日志&#xff0c;单元测试等知识点 其中最难的是反射和动态代理&#xff0c;其他知识点都非常简单 由于B站P数限制&#xff0c…

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一&#xff0c;尤其是在WebGL库的支持下。有了WebGL&#xff0c;可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此&#xff0c;设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库&#xff0c;它…

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点&#xff0c;是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的&#xff0c;原因有二。首先&#xff0c;在 CD20 阳性肿瘤的情况下&#xff0c;这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次&#xff0c;干…

火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2 月 9 日&#xff0c;国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》&#xff08;以下简称报告&#xff09;&#xff0c;报…

java程序,springboot程序 找不到主类,找不到符号解决思路

文章目录问题解决方案一.可以尝试clean掉maven依赖&#xff0c;然后重新启动二.右键工程&#xff0c;选择maven然后重新加载工程&#xff0c;接着再启动试试三.删掉工程中的services.iml文件&#xff0c;重新配置后接着再启动试试四. 终极方案清除idea缓存&#xff0c;重启idea…

Rust之错误处理(二):带结果信息的可恢复错误

开发环境 Windows 10Rust 1.67.1VS Code 1.75.1项目工程 这里继续沿用上次工程rust-demo 带结果信息的可恢复错误 大多数错误并没有严重到需要程序完全停止的程度。有时&#xff0c;当一个函数失败时&#xff0c;它的原因是你可以很容易地解释和应对的。例如&#xff0c;如…

LearnOpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…

Day891.一主多从的切换正确性 -MySQL实战

一主多从的切换正确性 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候&#xff0c;要先主动跳过这些错误&#xff0c;通过主动跳过一个事务或者直接设置跳过指定的错误&#xff0c;用GTID解决找同步位点的问题 大多…

oracle查找各PDB密码过期账户

连接oracle的时候&#xff0c;又报 ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 的错误。这种现象之前遇到不少&#xff0c;猜测可能又是某个sde账号密码过期或快过期&#xff0c;导致arcgis不停地连数据库&#xff0c;因而连接耗尽了。详见拙作&#xff1a…

电脑c盘满了怎么清理,c盘空间清理

电脑c盘满了怎么清理&#xff1f;电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以&#xff0c;我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上&#xff0c;您可以使用系…

windows10 安装DOSbox_32 debug.exe

windows10 安装DOSbox_32 debug.exe1.下载2. 安装DOSBox0.74-3-win32-installer.exe3. 配置DOSBox3. 启动DOSBox.exe4. 测试执行debug命令1.下载 DOSBox0.74-3-win32-installer.exe安装包debug.exe 2. 安装DOSBox0.74-3-win32-installer.exe 解压 双击DOSBox0.74-3-win32-insta…

QT+OPenGL模型加载 - Assimp

QTOPenGL模型加载 - Assimp 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 模型加载 先来张图&#xff1a; 我们不大可能手工定义房子、汽车或者人形角色这种复杂形状所有的顶点、法线和纹理坐标。我…

【surfaceflinger源码分析】surface与surfaceflinger之间的关系

本篇文章带着以下问题继续分析surfaceflinger的源码: 什么是surface ? surface与图形数据之间是什么关系&#xff1f;surface和surfaceflinger之间是什么关系&#xff1f; Surface定义 先看看Surface这个类的定义&#xff0c;主要是定义了很多与GraphicBuffer相关的操作。 …