初阶数据结构-Java
文章平均质量分 93
数据存储结构:顺序存储(顺序表、链表、栈、队列),树(二叉树、堆)
羽翼~
这个作者很懒,什么都没留下…
展开
-
初识集合框架 -Java
数据结构是计算机存储、组织数据的方式,指相互之间存在的一种或多种特定关系的数据元素的集合。算法是定义良好的计算过程,输入一个或一组值,输出一个或一组值。简单来说算法就是一系列计算步骤,输入数据通过算法转化为输出结果。原创 2023-09-09 10:12:47 · 509 阅读 · 9 评论 -
时间和空间复杂度
在计算机发展早期,计算机的存储容量很小,所以很在乎空间复杂度,但经过计算机行业的迅速发展,计算机的存储容量已经达到很高程度,所以如今我们已经不需要再特别关注一个算法的空间复杂度。递归调用了N次,开辟了N个栈帧,每个栈帧使用常数个空间,空间复杂度为O(N)。执行次数:func2(N,M)=N+M,大O表示法为O(N+M)。执行次数:factorial(N)=N-1,大O表示法为O(N)。执行次数:func2(N)=2*N+10,大O表示法为O(N)。开辟N+1个lang类型变量的空间,空间复杂度为O(N)。原创 2023-09-09 21:29:58 · 410 阅读 · 4 评论 -
包装类和认识泛型
通俗讲就是:返回的Object数组里,可能存放的是任何数据类型,可能是String,可能是Person,运行时,直接转给Integer类型的数组,编译器认为不安全。虽然在这种情况下,数组可以存放任何类型的数据,但是,更多情况下,我们还是希望他只持有一种数据类型而不是同时持有这么多类型。实现一个类,类中包含一个数组成员,使数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值。故a和b存储127不会new一个对象,指的是同一个地址,c和d存储128都会new一个对象,指的是不同的地址。原创 2023-09-12 11:51:39 · 538 阅读 · 14 评论 -
List与ArrayList
List中有许多方法:方法解释尾插 e将 e 插入 index 位置尾插 c 中的元素删除 index 位置元素删除遇到的第一个 o获取下标 index 位置的元素将 index 位置的元素设置为element清空判断 o 是否包含在线性表中返回第一个 o 的下标返回最后一个 o 的下标截取部分list在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架如下:ArrayList是以泛型方式实现的,使用时必须要先实例化;原创 2023-09-13 17:57:28 · 3228 阅读 · 40 评论 -
LinkedList与链表
LinkedList的底层是双向链表结构,链表没有将元素存储在连续空间中,而是存储在单独的节 点中,通过引用将节点连接起来了,因此在任意位置插入或者删除元素时,不需要搬移元素,效率较高。在集合框架中,LinkedList也实现了List接口:LinkedList实现了List接口,底层使用双向链表;没有实现RandomAccess接口,不支持随机访问;LinkedList在任意位置插入和删除效率较高,时间复杂度为O(1);适合任意位置插入的场景。原创 2023-09-22 14:40:13 · 800 阅读 · 19 评论 -
栈和队列-Java
throw new StackNullEception("栈为空,无法获取栈顶元素");栈是一种数据结构,虚拟机栈是JVM划分的一块内存,栈帧是方法调用时,虚拟机给方法分配的一块内存。队列中可以存储元素,那底层肯定要有能够保存元素的空间,通过前面线性表的学习了解到。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的元素遵循。,进栈过程中可以出栈,则下列不可能的一个出栈序列是()依次入栈,然后再依次出栈,则元素出栈的顺。//将链表中的元素(节点)放入栈中。接口是比较多的,栈和队列均可以使用该接口。原创 2023-09-23 20:12:02 · 1386 阅读 · 38 评论 -
数据结构-二叉树
二叉树的子树有左右之分,次序不能颠倒,故二叉树是有序树。Node right;// 右孩子的引用,常代表右孩子为根的整棵右子树。// 右孩子的引用,常代表右孩子为根的整棵右子树。// 左孩子的引用,常代表左孩子为根的整棵左子树。// 左孩子的引用,常代表左孩子为根的整棵左子树。:以某结点为根的子树中任一结点都称为该结点的子孙。:若一个结点含有子结点,则这个结点称为其子结点的父结点;:一个结点含有子树的个数称该结点的度,如上图,A结点的度为2。:一棵树中,所有结点度的最大值即为树的度,如上图,树的度为2。原创 2023-10-07 15:00:57 · 367 阅读 · 1 评论 -
数据结构-优先级队列(堆)
找。原创 2023-10-11 11:34:51 · 369 阅读 · 1 评论 -
Map和Set
虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为。比如上述场景,需要插入元素44,先通过哈希函数计算哈希地址,下标为4,因此44理论上应该插在该位置,但是该位置已经放了值为4的元素,即发生哈希冲突。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。,搜索的效率取决于搜索过程中元素的比较次数。原创 2023-10-18 20:20:59 · 90 阅读 · 1 评论 -
java中对象的比较
优先级队列在插入元素时有个要求:插入的元素不能是null或者元素之间必须要能够进行比较,为了简单起见,我们只是插入了Integer类型,那优先级队列中能否插入自定义类型对象呢?优先级队列底层使用堆,而向堆中插入元素时,为了满足堆的性质,必须要进行元素的比较,而此时Card是没有办法直接进行比较的,因此抛出异常在Java中,基本类型的对象可以直接比较大小。2.2 引用类型比较Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较, 那为什么可以比较?因为对于用户实现自定义类型,都默认继承原创 2023-10-11 22:02:23 · 175 阅读 · 0 评论 -
排序-算法
排序:使一串数据,按照其中某个或某些关键字的大小,递增或递减排列起来的操作。(本文所讲排序都是按升序排列。)稳定性:假设在待排序的记录序列中,存在多个具有相同的关键字,若经过排序,这些数据的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。把待排序的数据原创 2023-10-15 22:36:04 · 487 阅读 · 4 评论 -
再谈String
使用常量串创建String类型对象的效率更高,而且更节省空间。用户也可以将创建的字符串对象通过 intern 方式添加进字符串常量池中。在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,的方式, 我们会在未来的学习中遇到各种 “内存池”, “线程池”, “数据库连接池”……上述创建方式类似,为什么s1和s2引用的是同一个对象,而s3和s4不是呢?字符串常量池在JVM中是StringTable类,实际。“池” 是编程中的一种常见的, 重要的。原创 2023-10-21 17:01:54 · 630 阅读 · 2 评论 -
反射、枚举及lambda表达式
定义:Java的反射机制是在运行状态中对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。反射最重要的用途就是开发各种通用框架。原创 2023-10-22 18:48:14 · 127 阅读 · 2 评论 -
泛型进阶-Java
一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大,泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现参数化。方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表){...原创 2023-10-24 17:16:11 · 169 阅读 · 17 评论