数据结构
淡定一生2333
这个作者很懒,什么都没留下…
展开
-
数组
Java和C不同,Java自身会帮你做数组越界检查,如果越界了则直接抛出异常。而C不会,C如果越界的话就越界访问..这个特性有漏洞,可以访问到不属于自己的内存地址。 数组的下标为什么从0开始: 估计是历史遗留问题,因为C就是从0开始的,也有一些其他语言从1开始。从0开始有一个好处就是,取得arr[x]的地址比较好获取。 因为我们持有的是数组第一个元素的引用,如果下标从1开始,那么获取数...原创 2018-11-10 23:23:08 · 153 阅读 · 0 评论 -
链表及LRU算法实现介绍
链表有如下几种:单向链表、循环链表以及双向链表。和数组不同,链表在内存中占据的不是连续空间,所以内存申请相对自由,但是由于操作系统的pagecache加载的是内存页,所以链表可能不能很好的使用到操作系统的pagecache功能。 单链表: 单链表每个节点除了存储数据意外,还要记录下一个节点的地址。 循环单链表: 循环单链表和上面的单链表类似,只不过最后一个节点指向的是...原创 2018-11-10 23:26:29 · 905 阅读 · 0 评论 -
栈与队列
栈: 栈是一种只能在一段进行插入和删除操作的特殊线性表,是一种先进后出的数据结构(FILO/LIFO),在JDK中,Stack底层是基于数组实现的。 栈的应用还是蛮多的,比如在函数调用时,每进入一个函数,都会生成一个独立的栈帧(这里是对应JVM中栈的概念,用到了栈这种结构,但是存储的东西比较多),这个栈帧维护这需要的各种信息。需要将当前的状态进行入栈操作,函数调用完毕之后再进行出栈,恢复之...原创 2018-11-10 23:29:08 · 123 阅读 · 0 评论 -
从求一颗二叉树深度来看递归
虽然知道数据结构知识很重要,但是对于一个Java程序员来说,很多轮子其实已经造的很好了,但是在说到一些底层原理的时候因为已经忘的差不多了,有些东西已经模棱两可了,所以打算从今天开始,再把数据结构的东西捡起来,就从递归开始。 首先看下如何求一颗二叉树的最大深度,首先想到的就是使用递归,说一下个人对递归的一些理解: 怎么样的问题算递归: 一个问题的解可以分解为几个子问题的解 父问题和子问...原创 2019-03-20 22:29:20 · 399 阅读 · 0 评论 -
Guava包中的BloomFilter
如果要判断某个元素是否存在的话,首先想到的都是将数据放入到一个HashSet中,然后判断元素是否存在。但是这个方法有一个缺点,即当数据量很大时,比如1亿个整数,所耗费的内存空间也很大。 优化方案一:使用BitSet 可以初始化一个很长的一个Bit数组,将数值对应的Bit位置为true,然后根据是true还是false判断对应位置的数值是否存在。例如现在有数值0、3、63,...原创 2019-06-20 21:02:26 · 8593 阅读 · 1 评论