数据结构
易燃易炸佛系少女
学无止境
展开
-
TreeMap 源码解析
TreeMap 简介 红黑树结构 key 不能为空 节点是有序的,迭代顺序按照key值有序,可通过比较器指定排序规则 非线程安全 重要属性和结构 /** * 比较器指定节点排序规则,如果为空则通过key对象默认排序实现,如Key 为Integer 类型则是通过Integer内部实现的compareTo 方法进行比较 */ private final Comparator<? super K> comparator; /** * 根节点 */ private trans原创 2020-12-20 19:32:14 · 127 阅读 · 0 评论 -
HashSet 源码解析
HashSet 概述 hashSet 是对HashMap 的封装,底层的实现都是由HashMap 的实现, HashSet 的值都存在HashMap 的key中,value 是一个默认的空对象,HashSet 的 不可重复特征,也是由HashMap key 的唯一性实现的 重要属性 //数据存储对象, 对元素的操作也是由map对象完成 private transient HashMap<E,Object> map; // map 中的 vaule 值 private static fi原创 2020-12-20 19:31:06 · 112 阅读 · 0 评论 -
HashMap 源码分析
HashMap 数据结构 数组 + 链表/红黑树 重要属性 /** * 结点冲突数达到8时,就会对哈希表进行调整,如果table容量小于64,那么会进行扩容, * 如果不小于64,那么会将冲突数达到8的那个单链表调整为红黑树. */ static final int TREEIFY_THRESHOLD = 8; /** * 如果原先就是红黑树,resize以后冲突结点数少于6了,就把红黑色恢复成单链表 */ static final int UNTREEIFY_THRESH原创 2020-12-20 19:29:51 · 75 阅读 · 0 评论 -
Vector 源码解析
Vector 介绍 Vector现在基本已经被弃用,Vector与ArrayList的实现基本相同,它们底层都是基于Object数组实现的,两者最大的区别在于ArrayList是非线程安全的,而Vector是线程安全的 重要元素 /** * 存储元素的数组 */ protected Object[] elementData; /** * 集合中的元素个数 */ protected int elementCount; /** * 扩容大小 */ protected int capacityIncremen原创 2020-12-19 15:05:51 · 283 阅读 · 2 评论 -
LinkedList 源码
LinkedList 重要属性 使用双向链表实现,适用于更新频繁,查询较少的场景 除了实现了List接口还实现了 Deque 接口,所以LinkedList 提供了列表相关的方法外还提供了双向队列相关的方法 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializ原创 2020-12-19 15:01:19 · 176 阅读 · 2 评论 -
ArrayList源码解析
List 文章目录ListArrayList重要属性主要api插入方法 add删除元素 remove截取子集合 subList参考文档 ArrayList 重要属性 通过无参构造方法创建ArrayLit 的时候,默认的数组空间是 DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}, 在第一次添加元素的时候会扩容并初始化数组的大小 ,所以对于需要添加元素的ArrayList的初始化尽量指定数组容量,避免扩容 /** * 数组默认容量 */ pr原创 2020-12-14 20:28:32 · 68 阅读 · 0 评论 -
哈夫曼树,哈夫曼编码
哈夫曼树 1.历史 首先是为了找到最有效的高效的(空间,整体)编码,然后借助数据结构种的树型结构,发现通过构建这样一颗二叉树,可以得到最有效的编码 2.概念 给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小的树。又称最优二叉树,整体判定过程效率最高的数据结构 1. 二叉树 2. 带权的节点为叶子节点 3. 树的带权路径长度最小 相关概念: ...原创 2019-01-23 18:37:17 · 515 阅读 · 0 评论 -
【算法】kmp算法
kmp 算法 1. 概述 定义: 是一种改进的字符串匹配算法 传统匹配算法 主要思想 利用匹配失败后的信息以及已经匹配成功的信息,减少模式串与主串的匹配次数 计算模式串内部的匹配信息,匹配失败时最大的移动模式串,减少匹配次数 在已经匹配的模式串子串中,找出模式串中最长的相同的前缀和后缀,使他们重叠(前缀位置移动到后缀位置 ,最大...原创 2019-01-31 13:42:35 · 118 阅读 · 0 评论