双列集合

news/2025/3/5 16:11:32/文章来源:https://www.cnblogs.com/vvyyds/p/18233115

介绍

双列集合中,每次添加元素添加一对(2个)数值

每对元素之间是一一对应的

最顶层为Map,有三个实现类,如下图

双列集合特点

双列集合一次需要存一对数据,分别为键和值

键不能重复,值可以重复

键和值是一一对应的,每一个键只能找到自己对应的值

键+值这个整体 我们称之为“键值对”,或者“键值对对象”,在Java中叫做“Entry对象”

Map/双列集合基本方法

put,不仅仅是添加,还可以覆盖————当 要添加的键值对 的键值上 存有元素时,返回这个元素,没有则返回null————或者说,添加元素时,如果键已存在,则覆盖之前的值,否则直接添加上去————如下图

remove,返回删除的键对应的值

Map的三种遍历

通过键找值

1、获取所有的键

利用Map对象的keySet方法,获得一个Set对象,里面存储着所有的键

2、用迭代器、增强for、Lambda等方法遍历Set对象,获取所有的键,然后利用Map对象的get方法,get(键)——return 键对应的值,获得值

3、对键和值进行操作

通过键值对

通过Map对象的entrySet方法获取所有的键值对对象,然后遍历方法返回的Set集合

entrySet返回的Set集合的元素类型是Map.Entry<  , >类型

这种数据有两个方法分别为,getKey(),获取这个元素的键,getValue(),获取这个元素的值

Lambda遍历

Map对象有个 forEach方法,参数是BiConsumer接口的对象

BiConsumer接口是个函数接口

遍历方式如下

HashMap

是Map的实现类,直接用Map的类方法就可以

特点

特点都是由键决定的:(键值)无序、不重复、无索引(不能通过索引得到值,只能通过键得到值)

HashMap跟Hashset底层原理是一模一样的,都是哈希表结构

底层原理

1、首先创建一个默认长度为16,默认加载因子为0.75的名为table的一个数组,再利用put方法就可以添加数据了

2、put方法会创建一个Entry对象,里边存有要添加的键和值

3、利用键计算出哈希值,再计算出在数组中应存入的索引index,如果此位置没有元素,为NULL,则直接把元素放进去

   但如果此索引上已经有元素了,就会调用equals方法去比较键的属性值(只比较键的属性值

4、如果比较结果一样,则覆盖原有的Entry对象

   如果不一样,在JDK8之后,新元素直接挂在老元素的下面(放在链表的表尾)

5、当链表长度>8,而且数组长度 >= 64时,链表会自动转成红黑树

源码

 

总结

HashMap底层是哈希表结构

依赖hashcode方法和equals方法保证键的唯一性

如果存储的是自定义对象,则需要重写hashCode和equals方法

如果存储的是自定义对象,则需要重写hashcode和equals方法

LinkedHashMap

特点

是HashMap的子类

由键决定:有序、不重复、无索引。

这里的有序指的是保证存储和取出的元素顺序一致

底层原理

底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。

1、首先创建一个默认长度为16,默认加载因子为0.75的名为table的一个数组,再利用put方法就可以添加数据了

2、put方法会创建一个Entry对象,里边存有要添加的键和值

3、利用键计算出哈希值,再计算出在数组中应存入的索引index,如果此位置没有元素,为NULL,则直接把元素放进去

   但如果此索引上已经有元素了,就会调用equals方法去比较键的属性值(只比较键的属性值)

4、如果比较结果一样,则覆盖原有的Entry对象

   如果不一样,在JDK8之后,新元素直接挂在老元素的下面(放在链表的表尾)

5、当链表长度>8,而且数组长度 >= 64时,链表会自动转成红黑树

TreeMap

特点

TreeMap跟TreeSet底层原理一样,都是红黑树结构的

由键决定特性:不重复、无索引、可排序(对键进行排序)

注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则

自定义排序规则

默认排序/自然排序

Javabean类实现Comparable接口,进而指定比较规则

this表示当前节点,o表示红黑树上每个节点,即当你在增加节点时,需要对每个节点都去调用这个方法,从而在最后判断出当前节点该放在红黑树的哪个地方,再然后进行红黑规则

比较器排序

创建TreeSet集合时,自定义Comparator比较器对象,指定比较规则

两者同时存在

如果默认排序和比较器排序都存在,排序时按比较器排序进行排序

总结

idea源码表示

Ctrl B进入源码页

Ctrl F12看此类的大纲

以HashMap类为例

蓝色的图标表示类——Class  

红色的图标表示方法——method    ——和类同名的是构造方法———不同名的是成员方法

对于成员方法,以下图为例

从左到右依次是,方法图标,方法名,形参,返回值

 

向上的箭头表示——是重写的父类或接口的方法,箭头后边是父类/接口的名称

绿色锁指的是public  灰色圆圈指的是private

向右的箭头表示——是来自于这个地方/继承的这个父类的方法

灰色的方法表示——是继承的父类的方法

 

f是field,是常量或者成员变量

I是接口

C是类,类里边的类是内部类

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单列集合

介绍 集合分为两种,一种是单列集合,一种是双列集合单列集合中 List系列集合添加元素是有序,可重复,有索引的 set系列集合添加元素是无序,不可重复,无索引的Collection是单列集合的祖宗接口,所以全部的单列集合都可以使用它的方法Collection基本方法 add方法,添加元素 …

黄河流域水土保持生态效应AI一体化评价平台

黄河流域作为我国北方重要的生态屏障,其生态保护和高质量发展一直是国家战略的重点。随着人工智能技术的飞速发展,黄河流域水土保持生态效应AI一体化评价平台的建设,标志着生态保护工作进入了一个新的阶段。本文将对这一平台的建设内容进行深度分析。1. 平台建设背景与意义黄…

使用PHP+HTML集成DeepSeek API,实现一个简单的聊天对话项目

项目效果预览1. 准备工作PHP环境:确保你的开发环境中安装了PHP。 DeepSeek API密钥:注册并获取DeepSeek API的访问密钥。2. 创建PHP文件,编写API调用脚本 创建一个PHP脚本(api.php),用于调用DeepSeek API。假设API密钥为YOUR_API_KEY。 <?php header(Content-Type: a…

(15)事件处理,表单绑定

可以参考官网https://cn.vuejs.org/guide/essentials/event-handling.html来学习 添加事件,处理事件,传递参数 监听事件​ 我们可以使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。 用法:v-on:click="handler" 或 @click=&quo…

nginx + lua + kafka实现日志监控

nginx + lua + kafka实现日志监控 前言 1)架构图:2)方案:1:线上请求打向nginx后,使用lua完成日志整理:如统一日志格式,过滤无效请求,分组等。 2:根据不同业务的nginx日志,划分不同的topic。 3:lua实现producter异步发送到kafka集群。 4:对不同日志感兴趣的业务组实时消费…

day 17思维导图

图上有知识的补充!

Causal learning

简单来看:Causal learning = To learn causal models/features from dataCausal research 里包括两种重要问题,一种是Causal learning,另一种是Causal reasoning(不同的文献有不同的分法和叫法,这里用Jonas Peters等人的书里的)。简单的说,前者想解决如何从数据中发现因…

AI科研到底能做什么?看完你就懂了!

0 前言 本专栏目标:能做什么? 要怎么做? 效果如何?本质: 多Agent实现从数据采集到可视化全流程 AIGC数据应用: 数据采集 通过编写爬虫代码、访问数据库、读取文件、调用API等方式,采集社交媒体数据、数据库内容、文本数据、接口数据等。 数据处理 通过数据清洗、数据集成…

gitlab+jenkins+harbor+k8s安装操作流程之gitlab

GitLab的安装及使用教程GitLab简介GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装。 它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏…

fastadmin视图文件调用common.php的公共函数

╰︶﹉⋛⋋⊱⋋๑๑⋌⊰⋌⋚﹉︶╯

linux内核编译输出文件:vmlinux/Image/zImage/uImage区别

当前目录 ./ 为linux kernel编译输出根目录: ./vmlinux是编译输出的原始elf文件,可用于调试; ./arch/arm/boot/Image是二进制文件,可用于烧录,文件较大,使用工具链objcopy从./vmlinux生成; ./arch/arm/boot/compressed/vmlinux是elf文件,先将./arch/arm/boot/Image用gz…

AI 造游戏,3 小时开发、9 天狂赚 12 万,这波风口你跟不跟?

​故事要从这个上海程序员说起​ 有个叫Pieter Levels的码农,之前在全球最大的远程办公平台Remote OK工作过。去年某天,他突然想做个能在线玩、还能赚钱的小游戏。结果他和AI搭档,只用了三个小时就捣鼓出了一个能手机玩的飞机大战游戏,上线十天狂揽28万人民币,连马斯克都发…