- 博客(27)
- 收藏
- 关注
原创 【数据结构】HashMap源码 —— 简单介绍
哈希桶/开散列,链地址法/开链法是由:数组 + 链表(单链表) + 红黑树(当数组长度>=64 && 链表长度>=8以后,链表变成红黑树,树化和解树化)。java 会在冲突链表长度大于一定阈值后(当数组长度>=64 && 链表长度>=8以后),将链表转变为搜索树(红黑树)。当调用不带参数的构造方法时,默认是没有分配数组大小的。但第一次put的时候,数组大小分配为了默认的16。(put流程中有讲到)。当调用带一个参数的构造方法时,其实内部调用了带两个参数的构造方法。
2025-04-12 20:50:01
321
原创 【数据结构】Map和Set + HashMap、哈希桶,看完一篇就够了!!!
Set:集合,是一个接口,里面放置的是K模型。HashSet:底层为哈希桶,查询的时间复杂度为O(1)。TreeSet:底层为红黑树,查询的时间复杂度为O(logN),关于key有序的。Map:映射,是一个接口,里面存储的是K-V模型的键值对。HashMap:底层为哈希桶,查询时间复杂度为O(1)。TreeMap:底层为红黑树,查询的时间复杂度为O(logN),关于key有序的。Map接口与Set接口关于搜索相关的集合类,解决搜索的问题。TreeSet 和 TreeMap背后是一颗搜索树。搜索树:红黑树。
2025-04-11 20:52:15
969
原创 【数据结构】七大经典排序算法 —— 华山论剑,谁与争锋!!!
排序:所谓排序,就是使一串记录(元素),按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。主要是对数组中元素进行排序。掌握七大基于比较的排序算法基本原理及实现。基于比较排序:插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序。不需比较大小排序:基数排序、计数排序、桶排序。所有排序默认从小到大排序。都提供待排序数组,排序改变的是数组本身。
2025-04-05 17:00:37
1072
原创 【数据结构】优先级队列(堆) —— PriorityQueue
Java集合框架中提供了PriorityQueue 和 PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的PriorityBlockingQueue是线程安全的,本文主要介绍PriorityQueue。PriorityQueue底层默认是小根堆1、使用时必须导入PriorityQueue所在的包,即:import java.util.PriorityQueue;2、PriorityQueue中放置的元素必须要能够比较大小。
2025-03-30 11:01:41
1043
原创 【数据结构】二叉树 — 经典OJ面试题剖析!!!
二叉树的基本知识可以查看上一篇博客【数据结构】二叉树 — 图文并茂,带你领略它的魅力!!!二叉树所有题都是围绕着遍历进行的。任何一个二叉树,递归的时候一定是先递归到最左边的。 给你两棵二叉树的根节点p和q编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。给定一个二叉树,判断它是否是高度平衡的二叉树。平衡二叉树:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1
2025-03-26 21:21:52
1067
原创 【数据结构】二叉树 — 图文并茂,带你领略它的魅力!!!
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根结点没有前驱结点。二叉树每个结点度都是 <= 2,不存在度大于2的结点。即一棵树如果是二叉树,那么它的每一棵子树都是二叉树。二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树(指的树顺序,不是大小有序)
2025-03-24 17:50:15
1287
原创 【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相
栈(Stack)是普通类 先进后出。栈可以实例化,可以被数组(顺序表)、单链表、双链表实现;栈继承了Vector类,而Vector类底层就是一个数组在存储数据,所以栈的底层其实就是数组(顺序表)。队列(Queue)是一个接口 先进先出。队列不能实例化,但可以被数组(顺序表)、单链表、双链表实现;队列的底层是被LinkedList类实现的,LinkedList底层又是双向链表,所以队列的底层其实就是双向链表。通过数组(顺序表)、单链表、双链表实现的队列调用方法必须遵循先进先出的形式。双端队列(Deque)
2025-03-21 16:52:08
1246
原创 【数据结构】LinkedList与链表(2) —— 有码有图有真相
LinkedList底层实现就是双向 不带头 非循环链表由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。至少有三个域value数值域,prev前驱,next后继定义head引用代表当前链表的头节点作用,永远指向第一个节点定义lsat引用代表当前链表的尾结点作用,永远指向最后一个节点当实体化一个节点的时候除了val有值,其他的都是null方法解释尾插 e将 e 插入到 index 位置。
2025-03-19 11:03:48
1245
原创 【数据结构】LinkedList与链表(1) + 经典面试OJ题解析 —— 有码有图有真相
LinkedList,即链表结构。链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。解决了ArrayList不适合做任意位置插入和删除比较多的场景。链表是一个个叫做节点/结点的东西组成的,因此可以把节点定义为一个类(内部类)。每一个数据节点都是由两部分组成的value域和next域。
2025-03-18 10:54:52
1041
原创 【数据结构】ArrayList与顺序表 —— 有码有图有真相
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList是java.util包下的,使用的时候一定记着导包。ArrayList是以泛型方式实现的,使用时必须要先实例化。ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。
2025-03-14 18:54:55
1170
原创 【数据结构】List介绍
List中提供了好的方法,具体如下:虽然方法比较多,但是常用方法如下方法解释尾插 e将 e 插入到 index 位置尾插 c 中的元素删除 index 位置元素删除遇到的第一个 o获取下标 index 位置元素将下标 index 位置元素设置为 element清空判断 o 是否在线性表中返回第一个 o 所在下标返回最后一个 o 的下标截取部分 list。
2025-03-12 12:36:44
764
原创 【数据结构】包装类&泛型,看完此篇你将有一个新的认知!!!
一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍。就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。泛型也是一种语法。
2025-03-12 11:10:17
1329
原创 【数据结构】时间复杂度、空间复杂度 —— 有码有图有真相
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。因此写算法时优先考虑时间复杂度。
2025-03-11 17:12:14
777
原创 【数据结构】初识集合框架及背后的数据结构(简单了解)
Java 集合框架(Java Collection Framework),又被称为容器(container)是定义在 java.util 包下的一组接口 (interfaces) 和其实现类 (classes)。util 工具,称工具包,因此基本上在Java当中与工具相关的都在util包底下。其主要表现为将多个元素(element)置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD .
2025-03-10 20:49:55
770
原创 【Java】认识异常、异常的处理和自定义异常类 —— 有码有图有真相
Java 中虽然已经内置了丰富的异常类, 但是我们实际场景中可能还有一些情况需要我们对异常类进行扩展, 创建符合我们实际情况的异常。例如, 我们实现一个用户登陆功能此时我们在处理用户名密码错误的时候可能就需要抛出两种异常. 我们可以基于已有的异常类进行扩展(继承), 创建和我们业务相关的异常类.查看报错代码原因,要求必须是Throwable类异常,但你是NameException自定义类异常;所以说自定义异常类必须继承类库中的异常。
2025-03-09 22:21:49
945
原创 【Java】认识String类、字符串不可变性 + StringBuilder和StringBuffer —— 有码有图有真相
String 是 Java 中基础且重要的类,被声明为 final class,是不可变字符串。因为它的不可变性,所以拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类。它提供了append 方法可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列。在很多情况下我们的字符串拼接操作不需要线程安全,所以 StringBuilder 登场了。
2025-03-08 21:33:38
1258
原创 【Java】图书管理项目(简单实现)—— 有码有图有真相
通过前面的学习,我们将类和对象、封装、继承、多态、接口、数组等知识全部使用起来做一个小项目。检验下近期的学习成果同时也温习前面的知识避免遗忘。有遗忘的小伙伴们,快去翻找前面的博客查漏补缺哟。
2025-03-07 16:25:18
940
5
原创 【Java】三大常用接口:Comparable、Comparator 与 Clonable 接口 + 深拷贝和浅拷贝 —— 有码有图真相
即比较两个对象需要看对象拿什么比较,必须是可比较的对象。怎么才是可比较的对象,让这个类实现Comparable接口。我们都知道,所有类默认都继承于Object,那么能否用对象的引用直接调用clone方法?显然是不能的。拷贝这个对象同时把这个对象里面,包含引用所指的对象也拷贝一份,即为深拷贝。深拷贝和浅拷贝的区别在于实现代码的逻辑不同,而不在于某种方法。
2025-03-04 22:45:41
898
原创 【Java】抽象类和接口 + Object类、内部类 —— 有码有图有真相
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。即:抽象类不是一个具体的类,不能描述具体的对象。比如:说明:1、矩形、三角形、圆形都是图形,因此和Shape类的惯性应该是继承关系2、虽然图形图Shape中也存在draw的方法,但由于Shape类并不是具体的图形,因此其内部的draw方法实际是没有办法实现的3、由于Shape类没有办法描述一个县体的图形,导致其draw()方法无法具体实现,因
2025-03-03 22:51:46
1063
原创 【Java】继承和多态 (超详细!)—— 有码有图有真相
Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑。
2025-03-01 15:12:17
953
原创 【Java】类和对象(重点!详细讲解)+ this引用 、 封装 、包 、static成员 —— 有码有图有真相
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
2025-02-27 20:47:45
1120
原创 【Java】数组的定义与使用(万字详解!) + 冒泡排序、二分查找、数组拷贝等典型例题 + 二维数组 —— 有码有图有真相
上述代码没有任何问题,但不好的是:如果有20名同学成绩呢,需要创建20个变量吗?有100个学生的成绩那不得要创建100个变量。所有成绩的类型都是相同的,那Java中存在可以存储相同类型多个数据的类型吗?这就是本篇博客要讲的数组。数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:数组中存放的元素类型相同数组的空间是连在一起的每个空间有自己的编号,起始位置的编号为0,即数组的下标。数组本质上就是让我们能“批量”创建相同类型的变量。
2025-02-24 15:20:31
967
原创 【Java】方法的使用,传参 + 重载 + 递归 —— 有图有码有真相
方法就是一个代码片段,类似于 C 语言中的 "函数"。方法存在的意义(不要背, 重在体会)是能够模块化的组织代码(当代码规模比较复杂的时候)做到代码被重复使用,一份代码可以在多个位置使用.让代码更好理解更简单.直接调用现有方法开发, 不必重复造轮子.2.1 方法语法格式// 方法定义修饰符 返回值类型 方法名称 ( [参数类型 形参 ... ] ) {方法体代码;[return 返回值];实现一个两个整数相加的方法// 方法的定义【注意事项】
2025-02-22 12:46:00
1087
1
原创 【Java】程序逻辑控制(顺序、分支、循环)、输入输出方式 + 猜数字小游戏 —— 有码有图有真相
早上8:00起床--->洗漱--->吃早饭--->上课--->吃午饭--->上课--->运动--->吃完饭--->玩手机--->睡觉每天的生活貌似都是这么规律,顺序的做着每件事,前途一片渺茫~~我幡然醒悟,不好好学习可能要卖红薯,奋发图强可能离梦想会更近,于是我选择学习Java编程语言,从此:早上6:00起床--->看书敲代码--->上课+看编程书籍--->吃午饭--->刷题--->上课+看书--->吃晚饭--->总结--->看科技新闻--->睡觉就这样日复一日的努力。
2025-02-20 22:02:36
1003
原创 Java的数据类型、变量和运算符(详解) —— 有码有图有真相
在Java中使用String类定义字符串类型,比如:字符串中的 "+" 表示拼接在有些情况下,需要将字符串和整形数字之间进行转换:1. int转换为String方法1、方法2、不可取2. String转换为int计算机的最基本的用途之一就是执行数学运算,比如:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。
2025-02-20 09:55:09
892
原创 初识Java(简单认识)—— 有码有图有真相
【面试题】JDK、JRE、JVM之间的关系?JDKJava开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。JREJava运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。JVMJava虚拟机,运行Java代码。(实际上是一个软件,底层是由C/C++所写的)JDK = JRE + 开发工具集(比如:javac)JRE = JVM + JavaSE标准库。
2025-02-19 10:05:44
978
原创 为什么要写博客
对于不善言辞且有些社恐的我来说,在社交平台分享生活确实颇有挑战,俗话说万事开头难,中间难,结尾难(哈哈哈,开个玩笑😊)。自从上大学之后浑浑噩噩了许久,今天总算是“清醒”过来,想通了一些事觉得没什么可怕的,也没有什么可顾虑的。本人后续会持续输出C,java,数据结构,MySql等编程相关知识,以及学习过程中的个人见解。这里借用小说剑来中主人公的精神,打万遍拳,行万里路。
2025-02-17 10:17:21
189
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人