随笔分类 - 数据结构与算法
摘要:饿汉式 静态变量方式 public class Singleton1 { private final static Singleton1 instance=new Singleton1(); private Singleton1() {} public static Singleton1 getIn
阅读全文
摘要:LinkedHashMap源码分析 为什么要有LinkedHashMap? 在分析HashMap的时候提到了HashMap是无序的,即添加节点的顺序和遍历的顺序不一致 LinkedHashMap保证节点的顺序,这也是LinkedHashMap和HashMap的主要区别 存储示意图 类结构 Linke
阅读全文
摘要:Hashtable源码分析 类结构 Hashtable继承自Dictionary实现了Map接口。 Hashtable实现了Cloneable可以进行克隆。 Hashtable实现了Serializable可以进行序列化。 属性 节点 构造器 方法 Hashtable的所有方法都加了synchron
阅读全文
摘要:HashSet源码分析 简介 HashSet不能存放重复的值,且不保证存放的顺序。 类结构 HashSet继承自AbstractSet并重写了方法 HashSet实现可Cloneable接口,可被克隆 HashSet实现了Serializable接口,可以被序列化 属性 构造器 方法 iterato
阅读全文
摘要:HashMap源码分析 简介 HashMap是一个底层用数组+链表实现的存储KV键值对数据结构,它允许null键和null值。 原理 HashMap的存储规则是,根据K的hashCode运算得到hash值,然后根据hash值运算得到下标,如果数组中该下标没有值就放入,有值就一个一个比较是否hash值
阅读全文
摘要:ArrayList、LinkedList和Vector源码分析 ArrayList ArrayList是一个底层使用数组来存储对象,但不是线程安全的集合类 ArrayList的类结构关系 ArrayList实现了List接口,List接口中定义了一些对列表通过下标进行添加删除等方法 ArrayLis
阅读全文
摘要:链表 链表是一个以节点存储的有序列表,每个节点包括data域和next域,data域是用来保存值的,next域是保存下一个节点的地址,根据有无头节点,链表可分为带头节点的链表和不带头节点的链表 单链表 不带头节点的单链表 带头节点的单链表 双链表 分析为什么要双链表 1. 单链表每个节点只保存了后继
阅读全文
摘要:队列 队列是用数组或链表实现的,遵循先进先出规则的一个有序列表 使用数组模拟队列 分析:虽然队列中的元素已经全部出队,但是由于我们的队列是使用数组模拟的,而且每次入队的时候,头指定都后移,当我们入队次数增加,总有一时刻,头指针指向数组最大下标,尽管我们有出队,但是任然不能入队元素,我们可以使用数组模
阅读全文
摘要:稀疏数组 介绍 当我们在处理如五子棋这类棋盘问题时,只有棋盘中的黑子和白字位置对于我们来说是由具体意义的,当一个二维数组中的绝大多数值都是某一个值时,我们选定位默认值,我们可以使用稀疏数组来保存,以达到节约空间的目的 处理过程 1. 创建一个n+1行3列的二维数组(n为待压缩数组中不同于选定默认值的
阅读全文

浙公网安备 33010602011771号