
数据结构和算法
快乐小石头
这个作者很懒,什么都没留下…
展开
-
LinkedList源码分析1.8
一、LinkedList数据结构:LinkedList底层使用的双向链表结构,有一个头结点和一个尾结点,双向链表意味着我们可以从头开始正向遍历,或者是从尾开始逆向遍历,并且可以针对头部和尾部进行相应的操作注:源码中先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果 index>size/2,就只从位置size往前遍...原创 2019-02-27 15:12:02 · 181 阅读 · 0 评论 -
Java并发编程:ThreadPoolExecutor源码分析1.8
http://www.cnblogs.com/dolphin0520/p/3932921.htmlhttps://www.cnblogs.com/leesf456/p/5585627.htmlhttps://www.cnblogs.com/fixzd/p/9253203.html一、ThreadPoolExecutor的继承关系Executor接口:只有一个方法execute,传入线程任...原创 2019-02-28 23:08:11 · 236 阅读 · 0 评论 -
HashMap源码分析1.8
一、HashMap在JDK1.8以前,HashMap采用数组+链表来处理hash冲突,即相同hash值的节点都存在一个链表中,但是链表长度变长,查找的效率就越低。在JDK1.8之后,HashMap采用数组+链表+红黑树,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。下图数组+链表结构:jdk1.8之前的hashmap都采用上图的结构,基于一个数组和多个单链表,h...原创 2019-02-26 17:06:35 · 226 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码分析
一、ConcurrentHashMap跟HashMap,HashTable的对比HashMap不是线程安全:在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的HashTable是线程安全的:HashTable和HashMap的实现原理几乎一样,差别:1.Ha...原创 2019-02-26 23:27:15 · 51874 阅读 · 8 评论 -
ArrayList源码分析1.8
一、ArrayList属性:1、ArrayList属性主要就是当前数组长度size,以及存放数组的对象elementData数组public class ArrayList<E> extends AbstractList<E> implements List<E>, Rando原创 2019-02-27 11:40:20 · 162 阅读 · 0 评论 -
基本排序算法
一 、 冒泡排序1、算法描叙- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。- 针对所有的元素重复以上的步骤,除了最后一个。- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2、代码实现public class BubbleSort implement...原创 2019-03-21 17:42:33 · 147 阅读 · 0 评论 -
基本数据结构之二叉查找树
一、树的定义线性数据结构: ArrayList、LinkedList及其组合HashMap。非线性数据结构:树。如上图,从数据结构进化的角度来看,树(tree) 的生成是 链表 进化而来。链(Linked) 每个节点最多只有一个 前驱节点 ,那么可以称这个 链 为 树(tree) 。二、二叉查找树1、定义:二叉树是每个节点最多只有两个子树的树。子树通常被称为左子树(Left subtr...原创 2019-03-22 18:20:50 · 215 阅读 · 0 评论