HashSet/HashMap 存取值的过程
HashSet与HashMap的关系:
(1)HashSet底层用的是HashMap来实现的
(2)这个HashMap的key就是放进HashSet中的对象,value就是一个Object类型的对象
(3)当调用HashSet的方法时,实际上是向HashMap中增加了一个键值对,key就是set增加的那个对象,value是一个Object类型的对象
HashMap数据格式解析
(1)HashMap底层采用数组维护,数组的类型的Entry类型,Entry对象有2个成员变量——key和value,对应的就是map的key和value
(2 )Entry对象还有个Entry类型的成员变量next,是用于2个对象的hashcode值一样时,把一个对象的引用挂在这个对象的成员变量上的
HashMap存值过程(put方法)
(1)当往一个HashMap增加一个键值对时,会先调用键这个对象的hashcode方法,来得到一个hashcode值,然后根据这个值来计算出这个键值对所在的数组下标
(2)判断该下标数组存的引用是否为null,如果是,直接把对象存到数组里,存储结束;如果不是,转(3)
(3)判断已存在对象的key的equals方法,跟需要添加的对象的key对比,是否为true,如果是,覆盖这个key所对应的value,存储结束;如果不是,获取到已存在对象的next成员变量的引用,转(4)
(4)判断这个next所指向的值是不是为空,如果不为空,重复(3)的过程;如果为空,则把next引用指向要增加的对象
HashMap取值过程(get方法)
(1)调用key的hashcode方法,根据返回值定位到map里数组对应的下标
(2)判断这个数组下标是不是指向了null,如果是,返回null;如果不是,转(3)
(3)判断这个引用对应对象的key值的equals方法,跟查询的key值对比,判断是否为true,如果是,返回这个对象的value值;如果不是,转(4)
(4)判断这个引用对应对象的next指的是不是null,如果是null,返回null;如果不是,取出这个next对象,重复(3)
HashSet/HashMap 存取值的过程的更多相关文章
- 从源码看HashMap键值对集合
之前我们看过了两种类型的集合,ArrayList集合和LinkedList集合,两种集合各有优势,我们不具体说了,但是本篇要看的集合可以完成它们完成不了的任务.比如:现有一篇文章,要你统计其中出现了哪 ...
- HashTable, HashSet, HashMap的区别
HashTable, HashSet, HashMap的区别 hash是一种很常见也很重要的数据结构,是用hash函数根据键值(key)计算出存储地址,以便直接访问.由完美hash函数(即键值 ...
- Java——集合框架之Set&HashSet,HashMap,泛型,compareTo
Set Set接口--数据存放无序,非常简单,主要呈现信息列表 Set接口存储一组唯一.无序的对象 HashSet是Set接口常用的实现类 Set接口不存在get方法 Iterator接口:表示对集合 ...
- 基于散列的集合 HashSet\HashMap\HashTable
HashSet\HashMap\HashTable 1 基于散列的集合 2 元素会根据hashcode散列,因此,集合中元素的顺序不一定与插入的顺序一致. 3 根据equals方法与hashCode方 ...
- 03-【request对象获取请求的数据 & request对象存取值】
request概述(封装了客户端所有的请求数据) request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在 ...
- 利用HashMap存取对象并获得键值集合
1.HashMap 已实现的接口 Serializable, Cloneable, Map<K,V> 2.方法摘要 相关代码 /** * * @param ha * write(HashM ...
- 集合之ArrayList,HashSet,HashMap
结合框架的体系结构: 一.List(列表) 1. List的特点 (1)List是元素有序并且可以重复的集合,称为序列 (2)List可以精确的控制每个元素的插入位置,或删除某个位置的元素 (3)Li ...
- (转)JAVA HashSet 去除重复值原理
Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对.Set中允许添加null.Set不能保证集合里元素的顺序. 在往set中添加元素时,如果指定元素不存 ...
- Java List/HashSet/HashMap的排序
在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...
随机推荐
- Log4net 的 ASP.NET Core 扩展库
给大家安利一款 log4net 的 ASP.NET Core 扩展库,它是基于 log4net 开发的. 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现服务的注册和消费.直接 ...
- 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Update 更新操作过程
☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Update消息交互过程 Nchf_OfflineOnlyCharging_Update消息是是5G融合 ...
- 第15.42节、PyQt输入部件:QFontComboBox、QLineEdit、QTextEdit、QPlainText功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 输入部件量比较多,且功能很丰富,但除了用于编写编辑器.浏览器 ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的topLevelItem、indexOfTopLevelItem和takeTopLevelItem方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 获取指定位置顶层项 树型部件QTreeWidget中,通过topLevelItem方法根据位置索引取 ...
- 攻防世界 web进阶区 lottery
首先进入题目的页面. 按其要求登录.然后看到以下界面. 御剑扫描目录,发现了robots.txt (robots协议) ,进入查看 进入.git/目录,用神器 GitHack 下载文件. 然后查看源码 ...
- AtCoder Grand Contest 017 (VP)
contest link Official Editorial 比赛体验--之前做题的时候感觉 AtCoder 挺快的,现在打了VP之后发现还是会挂的--而且不是加载缓慢或者载不出来,直接给你一个无法 ...
- CF1439C Greedy Shopping
题解 尝试做一下,感觉是每次取一段前缀和,这样就相当于让我们证明在 \(a_i\le 10^{12}\) 时,不可能构造出隔一个取一个的情况(\(n=10^5\)). a[i]: 1, 2, 3, 5 ...
- 深入理解Java虚拟机(四)——HotSpot垃圾收集器详解
垃圾收集器 新生代收集器 1.Serial收集器 特点: 单线程工作,收集的时候就会停止其他所有工作线程,用户不可知不可控,会使得用户界面出现停顿. 简单高效,是所有收集器中额外内存消耗最少的. 没有 ...
- RDD、DF和DS的共性与区别
共性: 1.都是spark平台下的分布式弹性数据集 2.都有惰性机制,创建.转换如map操作时不会立即执行,遇到foreach等Action算子时才开始运算. 3.都会自动缓存计算 4.都有parti ...
- 九、git学习之——git基本命令全总结
初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: git add <file>,注意,可反复多次使用,添加多个文件: 使用命令git commit,完成. ...