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 存取值的过程的更多相关文章

  1. 从源码看HashMap键值对集合

    之前我们看过了两种类型的集合,ArrayList集合和LinkedList集合,两种集合各有优势,我们不具体说了,但是本篇要看的集合可以完成它们完成不了的任务.比如:现有一篇文章,要你统计其中出现了哪 ...

  2. HashTable, HashSet, HashMap的区别

    HashTable, HashSet, HashMap的区别     hash是一种很常见也很重要的数据结构,是用hash函数根据键值(key)计算出存储地址,以便直接访问.由完美hash函数(即键值 ...

  3. Java——集合框架之Set&HashSet,HashMap,泛型,compareTo

    Set Set接口--数据存放无序,非常简单,主要呈现信息列表 Set接口存储一组唯一.无序的对象 HashSet是Set接口常用的实现类 Set接口不存在get方法 Iterator接口:表示对集合 ...

  4. 基于散列的集合 HashSet\HashMap\HashTable

    HashSet\HashMap\HashTable 1 基于散列的集合 2 元素会根据hashcode散列,因此,集合中元素的顺序不一定与插入的顺序一致. 3 根据equals方法与hashCode方 ...

  5. 03-【request对象获取请求的数据 & request对象存取值】

    request概述(封装了客户端所有的请求数据) request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在 ...

  6. 利用HashMap存取对象并获得键值集合

    1.HashMap 已实现的接口 Serializable, Cloneable, Map<K,V> 2.方法摘要 相关代码 /** * * @param ha * write(HashM ...

  7. 集合之ArrayList,HashSet,HashMap

    结合框架的体系结构: 一.List(列表) 1. List的特点 (1)List是元素有序并且可以重复的集合,称为序列 (2)List可以精确的控制每个元素的插入位置,或删除某个位置的元素 (3)Li ...

  8. (转)JAVA HashSet 去除重复值原理

    Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对.Set中允许添加null.Set不能保证集合里元素的顺序. 在往set中添加元素时,如果指定元素不存 ...

  9. Java List/HashSet/HashMap的排序

    在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...

随机推荐

  1. 安装虚拟机(centos7)

    安装VMware 15 这里就不介绍VMware如何安装了,可以自行百度安装. 准备centos7镜像 我选择的是网易的镜像源,地址是:http://mirrors.163.com/centos/7/ ...

  2. Monkey 部署环境

    Monkey的介绍 它是Android系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行. Monkey是发送伪随机用户事件的工具. Monkey向系统发送伪随机的用户事件流,实现对正在开发 ...

  3. python 保存list,map方法

    1. 保存list import numpy as np a = [1,2,3,4,5] np.save("number.npy", a) k = np.load("nu ...

  4. Kubernetes 教程:在 Containerd 容器中使用 GPU

    原文链接:https://fuckcloudnative.io/posts/add-nvidia-gpu-support-to-k8s-with-containerd/ 前两天闹得沸沸扬扬的事件不知道 ...

  5. 查询满足条件的最新数据(逐步优化,mysql、达梦数据库)

    1.条件:报警信息表sensor_warning 2.需求: 查询当前车厢的.不同设备的.所有处理未完成的.不同报警原因的.时间最新的数据集合,最后按设备id或报警时间排序 3.原始sql,不满足实际 ...

  6. 【JSOI2019】精准预测(2-SAT & bitset)

    Description 现有一台预测机,可以预测当前 \(n\) 个人在 \(T\) 个时刻内的生死关系.关系有两种: \(\texttt{0 t x y}\):如果 \(t\) 时刻 \(x\) 死 ...

  7. 排序算法-Java实现快速排序算法

  8. 基数排序(Radix Sort)

    基数排序(Radix Sort) 第一趟:个位 收集: 第二趟:十位 第三趟:百位 3元组 基数排序--不是基于"比较"的排序算法 递增就是把收集的过程返过来 算法效率分析 需要r ...

  9. Java JVM——2.类加载器子系统

    概述 类加载器子系统在Java JVM中的位置 类加载器子系统的具体实现 类加载器子系统的作用 ① 负责从文件系统或者网络中加载.class文件,Class 文件在文件开头有特定的文件标识. ② Cl ...

  10. Unity状态机(Animator)

    状态机的状态(State) 每个Animator Controller都会自带三个状态:Any State, Entry和 Exit.