数据结构与算法专栏
文章平均质量分 86
这里是我数据结构与算法的专栏文章
Zz_waiting.
山前没相遇 山后别相逢
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java_Lambda表达式
Lambda表达式的优点很明显,在代码层次上来说,使得代码变的非常整洁。缺点也很明显,代码易读性差。1.代码简洁,开发迅速2.方便函数式编程3.非常容易进行并行计算1.代码可读性变差2.在非并行计算中,很多计算未必有传统的for性能高3..不容易进行调试。原创 2025-03-10 08:45:10 · 968 阅读 · 4 评论 -
java_枚举的使用
1.枚举本身就算一个类,其构造方法默认就算私有的,且都是默认继承于java.lang.Enum2.枚举可以避免反射和序列化的问题。原创 2025-03-09 18:42:45 · 1461 阅读 · 3 评论 -
java_了解反射机制
Java的反射(reflection) 机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到对应的属性和方法,就可以对部分类型信息进行修改。这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射(reflection)机制。原创 2025-03-09 17:28:02 · 1127 阅读 · 0 评论 -
java数据结构_泛型补充
用于在泛型的使用,称为通配符。原创 2025-03-06 19:55:26 · 546 阅读 · 2 评论 -
java数据结构_Map和Set(一文理解哈希表)_9.3
因此在查找一个元素的时候,。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),取决于搜索过程中。理想的搜索方法:可以。如果构造一种存储结构,通过某种函数,使得,那么在查找的时候通过该函数就可以很快找到该元素。向该结构中:插入元素:根据插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放搜索元素:对元素的关键码进行同样的计算,把求得的函数值当作元素的存储位置,在结构中按此位置取元素进行比较,若关键码相同,则搜索成功该方法称为。原创 2025-03-03 22:35:31 · 1016 阅读 · 4 评论 -
java数据结构_Map和Set_HashMap 底层源码解读_9.5
resize方法较为复杂,先理解为扩容即可,如果未传入数组长度,则在resize方法中默认初始化长度为16。原创 2025-03-05 18:36:52 · 461 阅读 · 0 评论 -
java数据结构_Map和Set_面试题_9.4
但还是没办法,再研究,为什么会解答错误,预期结果是先输出 i ,再输出 love,我们的输出为先输出了love,后输出了 i,不对呀,我们明明记得在调整优先级队列的时候,考虑到了两个单词出现次数情况相同,然后让字母顺序小的单词入列,为什么此处出现了问题呢?蓦然回首,bug却在灯火阑珊处。我们在遍历map向优先级队列填入元素的时候,在minHeap.size() < k的时候,即建立前k个元素的小根堆的时候,频率相同的情况,并没有处理,我们只是在后面放满元素的时候,才处理了频率相同的情况。原创 2025-03-04 21:36:38 · 876 阅读 · 2 评论 -
java数据结构_再谈String_10
"池" 是编程中的一种常见的, 重要的提升效率的方式, 我们会在未来的学习中遇到各种 "内存池", "线程池", "数 据库连接池" .... 比如:家里给大家打生活费的方式 1. 家里经济拮据,每月定时打生活费,有时可能会晚,最差情况下可能需要向家里张口要,速度慢 2. 家里有矿,一次性打一年的生活费放到银行卡中,自己随用随取,速度非常快 方式2,就是池化技术的一种示例,钱放在卡上,随用随取,效率非常高。执行String s2 = "abc"的时候,过程如下,将 a b c放入常量池中。原创 2025-03-05 20:47:51 · 1367 阅读 · 3 评论 -
Java数据结构_一篇文章了解常用排序_8.1
统计相同元素出现的次数根据统计的结果将序列回收到原来的序列中举例如下图:技术排序要先申请一个计数数组然后对序列段进行遍历,把对应出现的数据 出现的次数 再计数数组当中进行记录然后 i 向后走,重复上面的操作最终计数数组的状态为:然后遍历计数数组,如果在计数数组中值为0 说明未出现数据 重新写回数据即索引为1的值为2,说明有需要排序的序列段中有两个1,最终结果为:1 1 2 2 3 3 4 4 4 6 7 7 8 9那如何实现呢?原创 2025-02-26 17:52:15 · 1169 阅读 · 5 评论 -
java数据结构_优先级队列(堆)_6.2
在IDEA中的PriorityQueue的Structure中可以看到PriorityQueue有多种构造方法下面为相关源码实现,此处仅作列举,后面会讲解总结:使用:默认情况下,PriorityQueue队列是小根堆,如果需要是大根堆,需要用户提供比较器:此处先不作介绍,铺垫一下。原创 2025-02-19 22:57:37 · 1102 阅读 · 5 评论 -
java数据结构_Map和Set_9.2
Set和Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。原创 2025-03-02 15:51:43 · 339 阅读 · 0 评论 -
java数据结构_二叉树_5.1
从根开始定义,根为第 1 层,根的字结点为第 2 层,以此类推。:若一个结点含有子结点,则这个结点称为其字结点的父结点。如上图A是B的父结点,A也是C D E...的父结点, E是I的父结点...如上图,所有结点中,度最大的是A的度为6,所有上图的树的度为6。如上图,A没有双亲结点,A为根结点,一棵树中,只有一个根结点。:一个结点含有的子树的根节点称为该结点的子结点。如图,E为A的子结点,I为E的子结点...:度为0的结点称为叶结点。如图2,E结点即有B为父结点,又有C为父结点,则图2不是树型结构。原创 2025-02-05 16:47:23 · 759 阅读 · 1 评论 -
java数据结构_LinkedList与链表_3.1
则有了如下代码块调试代码,发现的确在head.next 等于 null 停止循环此时要考虑一个问题,把所有的值打印完之后,是会将head置为null的,也就是说,我们找不到head的位置了,无法继续再对链表进行操作了,这是十分后悔的结果,如何解决呢?也不难,我们创建一个其他遍历,cur,把head的值赋给cur,然后用cur循环即可。就有了如下代码,这样,变脸完成之后,head依然是指向最开始的val = 12的位置。原创 2025-01-29 18:52:43 · 853 阅读 · 0 评论 -
java数据结构_二叉树_5.4
以下图为例,研究二叉树的前 中 后 序的遍历方式要重点理解二叉树的递归过程,不断的将大树分解为小树,,如下图,以A为根结点的时候,红色框中的是其左子树和右子树,在A的左子树中,又可以以B为根,来分解出一棵新的树(绿色框中),其中,以B为根结点,D为左子树,E为其右子树...以这个思路,可以将一棵大的二叉树逐渐分解为小的二叉树。接下来实现用递归的方法来实现前 中 后序的遍历。原创 2025-02-09 19:19:23 · 1184 阅读 · 4 评论 -
java数据结构_二叉树_5.2
一棵二叉树是结点的一个有限结合,该集合:1.为空2.是由加上两颗别称为的二叉树组成。如下图:从上图可以看出:1.二叉树是不存在度大于2的结点,也就是说二叉树中的结点的度 <= 22.二叉树的子树是有左右之分的,次序不能颠倒,因此二叉树是有序树。(此处的有序并不是大小有顺序,是逻辑上的左右有序)补充:对于任意二叉树都是由一下的几种情况复合而成的,也就是说,二叉树中只会出现下图中的几种情况。原创 2025-02-05 23:40:27 · 662 阅读 · 2 评论 -
java数据结构_LinkedList与链表_3.2
双向不带头非循环的链表,对比于单向,就是每个节点增加了一个prev域来存放节点的前驱则整个链表的模拟效果图如下,节点可以直接找到其前驱和后继节点对照单向链表,代码块如下:在双向链表中,增加一个last成员变量,方便了尾插法注意:并不是有了last成员变量之后, 链表才是双向,单向和双向最主要的区别是,。原创 2025-01-30 03:53:19 · 1274 阅读 · 0 评论 -
java数据结构_优先级队列(堆)_6.1
队列是一种先进先出(FIFO)的数据结构,但某些情况下,,那这种情况,再用普通的队列结构,就不合适了。在这种情况下:数据结构应该提供两个最基本的操作,,这种数据结构就是。原创 2025-02-19 18:32:31 · 1170 阅读 · 2 评论 -
java数据结构_栈和队列_4.2
4..1中,栈都是底层使用数组实现的,其入栈和出栈的时间复杂度都是O(1)。那如果要用链表实现栈,该怎么实现?使用:时间复杂度(要遍历链表):相当于删除链表最后的尾巴节点,时间复杂度仍为,也要遍历整个链表使用:时间复杂度:因为栈后进先出的特性,出栈就相当于删除头节点,所以时间复杂度也为但也在前面提到过,可以给单链表的尾节点添加一个last此时使用:时间复杂度为因为有了last标记,不需要遍历了。原创 2025-02-04 17:35:19 · 943 阅读 · 1 评论 -
java数据结构_二叉树_5.3 (几道例题搞定二叉树的遍历)
3. 如下图二叉树,给出该二叉树的三种遍历方式。原创 2025-02-09 19:10:46 · 1114 阅读 · 2 评论 -
java数据结构_栈、队列的两道面试题_4.3
首先分析,因为栈和队列的原则不一样,栈是后进先出,队列是先进先出,肯定是无法仅仅使用一个队列来实现栈。可以用两个队列来模拟实现1. 两个队列qu1 qu2同时为空的时候,代表模拟实现的栈也是空的2. “出栈”的时候 出不为空的队列,出 size -1 个元素,出完size - 1个元素之后,剩下的最后的一个元素,就是模拟实现的栈出栈的元素3. "入栈“的时候 入到不为空的队列中。原创 2025-02-04 23:11:27 · 633 阅读 · 1 评论 -
java数据结构_二叉树_5.5
思路:遍历思路,在前面文章中,前序 中序 后序遍历的时候,会把树中的所有结点遍历一次。可以添加一个计数器,遍历一个结点就加一次。在IDEA中测试符合预期,但还是思考,上面的方法,也没有利用到这个方法的返回值。+ 1。该代码仍是化大树为小树,逐个解决子问题过程。下图为部分递归过程,注意先递出去,再归回来。原创 2025-02-17 20:44:47 · 360 阅读 · 1 评论 -
java数据结构_ArrayList与顺序表_2
如果使用IDE集成开发环境,可以连续按两次shift键在点击进去之后,尽可以看到java已经为我们实现的ArrayList在集合框架中,ArrayList是一个普通的类,实现了List等等接口,上图也可以看到ArrayList继承了AbstraList,实现了等等接口,具体的框架图如下图。这里对ArrayList有六点说明。原创 2025-01-13 18:01:33 · 818 阅读 · 0 评论 -
java数据结构_二叉树的相关面试题_5.6
首先要理解题意:相同指的是两棵树的 结构 和 数值 均是相同的。如下图:p 和 q两棵树 结构和其每个结点的数值均相同,才是两棵相同的树如下图:q这棵树的结构,与p对比来讲,少了根为1的左结点,则不是两棵相同的树如下图:q的根结点的值与p不同,则不是两棵相同的树总结下来:不相同有两种情况:1.一棵树的某棵子树为空,另一棵树的对应的那棵子树不为空,如下图:2.虽然两棵树都不为空,但其值不相同注意代码的顺序一定要检查是否为空,然后再对于检查p.val和q.val是否相同。原创 2025-02-17 20:45:10 · 1214 阅读 · 0 评论 -
java数据结构_栈和队列_4.1
有四种情况:一:不匹配二:左括号不匹配三:右括号不匹配四:解决问题:首先要遍历提供的字符串Stringi++)将括号一个一个提出来因为在往栈中存放时,要将第一个右括号与最后一个左括号匹配,所以,要判断右与左//如果是左括号,就直接入栈} else {//是右括号,就要判断这个右括号与最后一个左括号是否匹配//注意:在前面没有左括号,又因为题目要求 左括号必须与右括号闭合,所以这种情况直接返回false//此时这个top就是最后一个左括号。原创 2025-02-02 01:03:53 · 707 阅读 · 0 评论 -
洗牌算法---ArrayList实现
采用面向对象的思想。原创 2025-01-16 22:36:07 · 499 阅读 · 3 评论 -
java数据结构_Map和Set_9.1
如下图,就是一棵二叉搜索树,二叉搜索树的中序遍历就是升序排列的。原创 2025-03-01 19:53:25 · 846 阅读 · 9 评论 -
Java数据结构_一篇文章搞定java对象的比较_7
上篇文章研究了优先级队列,优先级队列在插入元素中,要求插入的元素不能是null或者元素之间必须要能够进行比较,为了简单起见,上篇文章只是插入了Integer类型,那优先级队列中是否能插入自定义类型的对象呢?有如下代码:运行结果为:原因在上篇文中也有所提及,优先级队列底层使用堆,而向堆中插入元素中,为了满足堆的性质(offer方法中会检测是否有比较器,如果没有比较器会强转为Compareable),必须要进行元素的比较,而此时自定义类型Card是没有办法直接进行比较的,所以会抛出上面的异常。Java中,原创 2025-02-22 15:31:25 · 1215 阅读 · 10 评论 -
空间复杂度的一道练习题
解析:上面的函数的作用是实现生成一个倒金字塔的二维数组。分析一下函数的空间复杂度。原创 2025-01-03 16:29:17 · 203 阅读 · 0 评论 -
java数据结构_1
1.多画图2.多思考3.多写代码Java集合框架(Java Collection Framework),又被称为容器(container),是定义在java.util包下的一组接口interfaces和其实现类classes。将多个元素放在一个单元中,对这些元素进行快速,便捷的存储,检索,管理,即增删改查CRUD。下图是类和接口的一个总览图,这里先放在此处留哥眼熟,后续会慢慢了解。原创 2024-12-30 18:48:12 · 889 阅读 · 1 评论
分享