美文网首页
关于链表与HashMap的一些理解

关于链表与HashMap的一些理解

作者: 一个疯掉的沙子 | 来源:发表于2019-11-08 17:55 被阅读0次

一.链表

1.创建链表对象,链表通常包含键Key,值Value和下一个链表对象的引用


链表对象
链表示意图

2.链表的使用


使用链表

3.链表的数据遍历和修改
直接通过循环遍历,可以查看整个链表的数据


从node1遍历链表
结果
修改链表某个节点的值
修改节点的值
结果

二.HashMap的一些理解(不包含红黑树)

1.数据结构


hashMap结构图

hashMap的最上层为一个数组结构,数组中保存的数据为链表,例如数据tab[],此数据的tab[1]=node1,如果向数组中放入node2,此时数据可以存储为node1.nextNode=node2
2.代码简单模拟hashMap添加获取数据
创建HashMap的链表对象


链表对象
创建map对象
map对象
查询数据方法

map对象中table数组的大小为1,真正的hashMap中此为动态扩充,初始大小默认为16的数组
简单使用


简单使用 数据结果

修改代码为可设置数组大小


可设置数组大小
根据hash值放入数组

同时我们可以根据key的hash判断数据存放在tab数组中的位置来查询数据


数据获取

我们使用简单数据进行测试,debug查看下数据存放情况


使用
数据存放情况

3 table[k.hash()&[n-1]] 是什么意思?
k.hash()是根据哈希算法得到键key的哈希值,此为一个int类型的值
&(与运算)符号为位相与运算符,根据二进制数进行与的运算操作
n代表数组的大小,此处hashmap的数组大小可以为8,16,32...
根据此表达式的运算,计算出此数据在数组中存放的位置
此处我们举例计算下


哈希与运算举例
源码解读

相关文章

  • 关于链表与HashMap的一些理解

    一.链表 1.创建链表对象,链表通常包含键Key,值Value和下一个链表对象的引用 2.链表的使用 3.链表的数...

  • HashMap及其并发的一些理解

    HashMap及其并发的一些理解 HashMap 在jdk1.8之前,HashMap通过数组加链表的方式实现。在1...

  • 使用LinkedHashMap实现LRU算法

    LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护...

  • HashMap,LinkedHashMap简析及LruCache

    简介 HashMap:数组+单向链表 LinkedHashMap: HashMap + 双向循环链表 LruCac...

  • LinkedHashMap

    LinkedHashMap继承于HashMap LinkedHashMap是hashmap和链表的结合体,通过链表...

  • Java类集框架 —— LinkedHashMap源码分析

    前言 我们知道HashMap底层是采用数组+单向线性链表/红黑树来实现的,HashMap在扩容或者链表与红黑树转换...

  • HashMap

    HashMap 解决Hash冲突 java 中的HashMap 通过链表法解决Hash冲突 链表法 链表法就是将相...

  • Java集合类-HashMap

    1. HashMap的数据结构 HashMap实际上是一个“链表散列”的数据结构,是数组与链表的结合体。HashM...

  • HashMap源码理解

    HashMap理解 HashMap定义 HashMap实现机制 HashMap与HashTable的主要区别 关键...

  • Java的LinkedHashMap

    简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表...

网友评论

      本文标题:关于链表与HashMap的一些理解

      本文链接:https://www.haomeiwen.com/subject/llcwbctx.html