随笔分类 -  数据结构

摘要:List有序,顺序是插入的顺序;Set无序指的是打乱了插入的顺序;HashSet底层是HashMap是真正的无序;TreeSet有序,但这个顺序是根据排序规则排序的。 阅读全文
posted @ 2021-02-21 15:08 zhuangrunwei 阅读(623) 评论(0) 推荐(0)
摘要:插入、删除功能实现 /* * 使用单链表;每次插入大约需要比较N/2次; * 插入效率是O(N),删除表头元素效率是O(1) */ public class MySortQueue { // 使用单链表实现 private Entry root; private static class Entry 阅读全文
posted @ 2020-07-01 19:15 zhuangrunwei 阅读(233) 评论(0) 推荐(0)
摘要:堆 优先级队列是一种抽象数据结构(ADT)。优先级队列可以用数组实现,删除最大或最小值的效率是O(1),但插入数据的效率是O(N)。堆是优先级队列的另一种实现 椎的效率 堆是一种树,插入删除都是O(logN),不支持查询 堆的特点 1、完全二叉树,即每一层从左到右都是满的。2、常用数组实现。使用数组 阅读全文
posted @ 2020-06-11 23:10 zhuangrunwei 阅读(190) 评论(0) 推荐(0)
摘要:抽象数据类型 列表、栈、队列 实现数据结构 是否重复有序 不同的链表 单链表、双端链表、双端双向链表 LinkedList、ArrayList 大小固定,有下标 插入删除,效率都是O(N) add、remove、contains、indexof ArrayList、Vector 默认容量 10 默认 阅读全文
posted @ 2020-06-11 20:51 zhuangrunwei 阅读(274) 评论(0) 推荐(0)
摘要:概念 数据结构解决数据怎么存放,不同的数据结构插入、查询的速度不一样算法操作数据结构里的数据,有插入、查找、删除、迭代、排序等操作 常识 length返回的是数组的容量,size返回的是元素个数 旧框架 Vector、Stack、HashTable都兼容于类集框架 List List的实现类:Arr 阅读全文
posted @ 2019-02-27 16:51 zhuangrunwei 阅读(209) 评论(0) 推荐(0)
摘要:Collections 是一个操作 Set、List 和 Map 等集合的工具类。 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。 Collections 类中提供了多个 synchronizedXx 阅读全文
posted @ 2019-02-26 22:03 zhuangrunwei 阅读(246) 评论(0) 推荐(0)
摘要:ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。 阅读全文
posted @ 2019-01-08 17:15 zhuangrunwei 阅读(156) 评论(0) 推荐(0)
摘要:LinkedHashMap既是一个HashMap,也是一个链表 阅读全文
posted @ 2019-01-08 00:01 zhuangrunwei 阅读(143) 评论(0) 推荐(0)
摘要:HashSet源码分析——HashSet由哈希表实现 阅读全文
posted @ 2019-01-07 23:15 zhuangrunwei 阅读(182) 评论(0) 推荐(0)
摘要:HashMap源码分析 package java.util; import java.io.*; public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { // 阅读全文
posted @ 2019-01-07 22:31 zhuangrunwei 阅读(204) 评论(0) 推荐(0)
摘要:Hashtable也采用的链地址法 Dictionary类 Hashtable的get/put方法是从字典来的,虽然它也实现了Map接口,Map接口也有get/put方法 阅读全文
posted @ 2019-01-07 22:09 zhuangrunwei 阅读(153) 评论(0) 推荐(0)
摘要:补充:哈希表底层是一个数组,需要转换为数字才可以插入数据。 哈希方法是把无穷的内容转化为有限的数字区间,所以一定会有冲突。无穷的内容,如订单号、姓名、地址所有的内容都可以被转化。有限的数字区间,从0开始的到某个终点的区间。 哈希表 使用哈希函数确定下标以插入数据的数组叫哈希表 哈希化 通过哈希函数把 阅读全文
posted @ 2019-01-07 21:34 zhuangrunwei 阅读(259) 评论(0) 推荐(0)
摘要:TreeSet——底层是TreeMap 阅读全文
posted @ 2019-01-05 23:50 zhuangrunwei 阅读(151) 评论(0) 推荐(0)
摘要:TreeMap——由红黑树实现 阅读全文
posted @ 2019-01-05 23:42 zhuangrunwei 阅读(134) 评论(0) 推荐(0)
摘要:索引 索引是由关键字-块号码对组成的按关键字排序的列表或树 使用索引 使用有序的索引连接文件记录 文件里的记录按照任意顺序排列,比如可以按插入时间排序 优点 索引比文件中所有记录小得多,甚至可以完全放在内存里,这样当数据库程序启动后就把索引读到内存中来;对于数据库来说,索引文件使用B+树保存 查询快 阅读全文
posted @ 2019-01-05 22:48 zhuangrunwei 阅读(178) 评论(0) 推荐(0)
摘要:补充:英文原称“B-tree”,翻译为中文时,“B-树”、“B树”都可以,但“B树”更常用。 B树的高度直接决定了最坏的情况下查询所需的硬盘I/O次数。 一棵高度为3的B树,查询一条记录最多需要3次磁盘I/O(根节点 -> 中间节点 -> 叶子节点)。通过增加每个节点的分支数(阶数),B树能在存储大 阅读全文
posted @ 2019-01-05 21:59 zhuangrunwei 阅读(189) 评论(0) 推荐(0)
摘要:硬盘存储速度 1、内存,使用电子方式工作,几微秒(一秒的百万分之一)就可以访问一个字节。 2、外存 数据在磁盘的圆形磁道上排列,磁盘的磁道类似老式的留声机轨道。 (1)、读写头移动到正确的磁道,这个机械运动需要几毫秒(一秒的千分之一)。 (2)、读写头等待磁盘旋转到正确的位置,即使磁盘每分钟旋转10 阅读全文
posted @ 2019-01-05 21:15 zhuangrunwei 阅读(1173) 评论(0) 推荐(0)
摘要:2-3树 2-3树在历史上很重要,并且在很多应用程序中还在使用。 2-3树和2-3-4树 和2-3-4树相比,除了子节点数不一样外,其它的都完全一样。 插入 在查找插入位置的过程中不理会遇到的节点是不是满的,顺着树找到要插入的叶节点,如果叶节点不满,就插入新值。 分裂节点 如果叶节点满了,分裂叶节点 阅读全文
posted @ 2019-01-05 20:30 zhuangrunwei 阅读(161) 评论(0) 推荐(0)
摘要:多叉树 非叶节点的子节点可以多于两个 2-3-4树 2-3-4树的非叶节点可能含有两个、三个或四个子节点,所以叫2-3-4树;2-3-4树的非叶节点最多可以有4个子节点,所以又叫4叉树。有两个子节点的节点叫2-节点,有三个子节点的节点叫3-节点,有四个子节点的节点叫4-节点。 对非叶节点来说,节点有 阅读全文
posted @ 2019-01-05 17:08 zhuangrunwei 阅读(344) 评论(0) 推荐(0)
摘要:补充:红黑树和avl都是平衡树。相比较——红黑树删除插入更快,因为有红黑规则,删除插入后,不需要回溯到根元素来检查树的平衡;avl需要回溯到根元素来检查树的平衡。红黑树查询稍微慢一点(最差2Log2N),avl树最差log2N+1,用大O表示法都是logN。 java的TreeSet TreeMap 阅读全文
posted @ 2019-01-03 19:17 zhuangrunwei 阅读(445) 评论(0) 推荐(0)