为什么学习HashMap源码?作为一名java开发,基本上最常用的数据结构就是HashMap和List,jdk的HashMap设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结
分类:
其他好文 时间:
2020-11-12 13:38:48
阅读次数:
8
一、首先是二叉树: 1)定义 2)前、中、后序遍历 二、二叉搜索树: 中序遍历是有序的 本身的定义也是递归的: 1)查找:复杂度 log2n (n表示数的节点个数) 极端情况,退化成链表,查找效率和链表一样 2)插入节点、删除节点也要会 三、平衡二叉树:左右子树都是平衡二叉树 1)2-3树 2)AV ...
分类:
其他好文 时间:
2020-11-07 17:44:46
阅读次数:
36
一、HashMap底层用到的数据结构 数组+单向链表+红黑树 数组:数组每一项都是一个链表,其实就是数组和链表的结合体 单向链表:当法神hash碰撞时,首先会找到数组对应位置,然后1.8采用尾插入法(1.7采用头插入法),形成一个单项链表结构 JDK1.8 红黑树:当数组中每项的链表长度大于8时,会 ...
分类:
其他好文 时间:
2020-11-01 09:28:52
阅读次数:
17
现代计算机科学以尼尔·福特的“人生苦短,切莫手动分配内存。”为嚆矢。滥觞于哲学与数学的期望正失去它们的借鉴意义。但面对看似无垠的未来天空,我想循菲尔·卡尔顿“计算机科学中仅存在两件难事:缓存失效和命名。”好过过早地振翮。 我们怀揣热忱的灵魂天然被赋予对超越性的追求,不屑于古旧坐标的约束,钟情于在别处 ...
分类:
其他好文 时间:
2020-10-05 22:29:21
阅读次数:
37
# 前言
> 本文收录于专辑:[http://dwz.win/HjK](http://dwz.win/HjK),点击解锁更多数据结构与算法的知识。
你好,我是彤哥。
前面两节,我们一起学习了关于跳表的理论知识,并手写了两种完全不同的实现,我们放一张图来简单地回顾一下:
![15](http://img.oicoding.cn/img/20200904063037.png)
实现跳表的关键
分类:
其他好文 时间:
2020-09-21 11:49:48
阅读次数:
39
转自:https://www.cnblogs.com/arnoldlu/p/8329279.html 专题:Linux内存管理专题 关键词:VMA、vm_area_struct、查找/插入/合并VMA、红黑树。 用户进程可以拥有3GB大小的空间,远大于物理内存,那么这些用户进程的虚拟地址空间是如何管 ...
分类:
系统相关 时间:
2020-09-18 17:25:39
阅读次数:
66
二叉平衡树: 平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、T ...
分类:
其他好文 时间:
2020-09-17 12:00:19
阅读次数:
59
正文加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度,它衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。对于使用链表法的散列表来说,查找一个元素的平均时间是O(1+a)。因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费。如果你看过源代码,你会发现在初始条件下,HashM
分类:
其他好文 时间:
2020-08-25 15:58:05
阅读次数:
58
上节回顾 上一章我们介绍了二叉树,二叉搜索树相关的一些知识。 当一个二叉搜索树是一个满二叉树,或者是完美二叉树的时候可以计算一下二叉搜索树的查找,插入,删除的时间复杂度。 从代码来看它们的时间复杂度都是和树的高度相关的。 满二叉树的高度是$log_2(n + 1)$,完美二叉树的高度是$floor( ...
分类:
其他好文 时间:
2020-08-17 17:10:18
阅读次数:
56