
数据结构相关源码
数据结构和算法
smileTimLi
一只站在树上的鸟儿,从来不会害怕树枝断裂,因为它相信的不是树枝,而是它自己的翅膀
展开
-
LRUCache 详解
LRU算法详解一、什么是 LRU 算法就是一种缓存淘汰策略。计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢?LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,...转载 2020-04-17 20:22:00 · 8487 阅读 · 0 评论 -
HashMap 源码分析
Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: HashMapHashMap根据 HashCode 值来存储数据,可以直接定位,所以访问速度很快,但遍历顺序不确定,通过hashcode计算得出...原创 2020-04-17 11:20:02 · 209 阅读 · 0 评论 -
HashMap 扩容、寻址、hash算法
1、HashMap 底层的数据结构数组 + 最简单的原理对张三计算出来一个hash值,根据这个hash值对数组进行取模,就会定位到数组里的一个元素中去[<>,<>,<>,<>,<张三,测试数据>,<>,<>,<李四,测试数据>,<>,<>,<>,&l...原创 2020-03-18 14:05:43 · 2005 阅读 · 0 评论 -
栈和队列
栈是限定仅在表尾进行插入和删除操作的线性表队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表如果使用数组实现,下表从0开始队列的顺序存储:出队复杂度高O(n), 容易假溢出中缀运算符转为后缀表达式后缀表达式通过栈实现,数字直接显示,符号入栈...原创 2020-03-15 13:45:14 · 146 阅读 · 0 评论 -
LinkedList 源码阅读
第一部分:单向链表public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、使用了transient修改size,链表中的两个指针...原创 2020-03-14 22:08:22 · 111 阅读 · 0 评论 -
通过ArrayList对modCount的操作分析fail-fast 机制
AbstractList类中有一个属性protected transient int modCount = 0;api中对它的描述是: 此列表已被结构修改的次数。 结构修改是改变列表大小的那些修改,或以其他方式扰乱它,使得正在进行的迭代可能产生不正确的结果。 该字段由迭代器和列表迭代器实现使用,由iterator和listIterator方法返回。 如果该字段的值意外更改,迭代...转载 2020-03-14 17:31:43 · 322 阅读 · 0 评论 -
ArrayList 源码阅读
class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable因为数组比较重要,源码也好阅读,就找几个常用的记录一下,用到的或者自己理解能力上来后,慢慢的在深度阅读源码1、数组默...原创 2020-03-14 17:07:19 · 150 阅读 · 0 评论 -
数组和链表区别
总结:1)数组便于查询和修改(顺序线性),但是不方便新增和删除2)链表适合新增和删除(指针),但是不适合查询,根据业务情况使用合适的数据结构和算法是在大数据量和高并发时必须要考虑的问题1.链表是什么链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素;链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排...转载 2020-03-13 22:18:46 · 331 阅读 · 0 评论