数据结构和算法设计
文章平均质量分 73
hymKing
这个作者很懒,什么都没留下…
展开
-
CopyOnWriteArrayList实现原理源码分析
针对于并发场景下动态数组的选型,可以使用线程安全的列表Vector,Vector是jdk1.0版本就带有的一个线程安全的动态数组类,但是Vector的实现原理之前分析过,对于所有对内部存储数据结构的操作,都添加了同步锁,这样的实现方式,虽然保证了线程的安全性,大并发场景下,却等同于多个线程的串行化执行,效率低下。jdk1.5引入了新的线程安全的列表实现CopyOnWriteArrayList。一、CopyOnWriteArrayList的实现类图类图结构和ArrayList完全一致,这个也合理,从Co原创 2021-11-11 16:40:56 · 3316 阅读 · 0 评论 -
JDK1.8版本HashMap源码原理分析
HashMap是一个KV的容器对象,也是日常在开发当中非常常用的对象,比如我们可能经常做一些内存缓存的时候,很多时候就选用HashMap这种KV的数据结构。在实现原理上,是基于哈希表的Map接口实现,是常用的java集合之一,非线程安全的。HashMap可以存储null的key和value,但是null作为键值只能有一个,做为值的话,可以是多个。这和Map的键要保持唯一性并不冲突。一、HashMap的类图结构二、概念、原理概述Jdk1.8之前的HashMap是由数组+链表作为底层数据结构实现的,数原创 2021-10-27 18:57:56 · 942 阅读 · 2 评论 -
Vector实现原理源码分析
Vector在jdk1.0版本就存在的一个并发列表类,Vector和ArrayList实现了非常相似的接口,集成了相同的类。和ArrayList不同的是,Vector是线程安全的,大部分的对外暴露的公共方法上,都添加了synchronized同步锁,很显然,同步锁的加入,使得Vector的性能并不高,要使用线程安全的List,则推荐CopyOnWriteArrayList。一、Vector的类结构从类的结构图看,Vector的类结构体系基本和ArrayList一致。二、源码分析/** * 存储元原创 2021-09-29 17:50:14 · 1775 阅读 · 0 评论 -
集合对象-ArrayList实现原理源码分析
集合对象-ArrayList实现原理源码分析最近再重看并发编程,又有新的体会,读书真是一个神奇的事情,读书能够提升认知水平,认知水平提高后,再复读往往能够获得新知。扯远了,在读构建线程安全类章节中,看到了CopyOnWriteArrayList,今天咱们结合ArrayList,Vector做一个简单的对比记录。主要从以下几个维度来看他们之间的联系和差别,比如代码底层的数据结构的实现、扩容机制上的区别、是否线程安全、性能上的差别。一、ArrayList继承体系图:ArrayList直接实现了了四个原创 2021-09-29 16:04:57 · 237 阅读 · 0 评论 -
算法基础回顾-时间复杂度和空间复杂度
时间复杂度和空间复杂度主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。时间复杂度时间复杂度使用大O表示法,在大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O...原创 2020-04-29 10:55:59 · 400 阅读 · 0 评论 -
判断一个二叉树是另一个二叉树的子…
题目描述:如何判断一个二叉树是否是另一个的子结构?比如:2/ \9 8/ \ /2 3 5/6有个子结构是9/ \2 32、分析问题:有关二叉树的算法问题,一般都可以通过递归来解决。那么写成一个正确的递归程序,首先一定要分析正确递归结束的条件。拿这道题来讲,什么时候递归结束。第二个二叉树root2为空时,说明root2是第一棵二叉树的roo原创 2012-12-12 19:52:20 · 1599 阅读 · 2 评论 -
树和二叉树
注:树的定义是递归原理的定义,也就是树种还有子树,那么到底什么是递归呢?程序调用自身的编程技巧称为递归(recursion),在数学函数中在函数自身又调用自身的类似的解决问题的方法就称为递归原理。1.树树是有n个节点的有限集合。(1)在一棵任意非空树种,有且只有一个节点为根节点。(2)当n>1时,其余节点可以分为n个互不相交的有限集合,且每一个集合又构成树,成为根节点的子树。树的四种原创 2012-12-12 19:52:18 · 883 阅读 · 0 评论 -
冒泡排序-java源码
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),原创 2012-12-20 21:33:54 · 861 阅读 · 0 评论