数据结构(Java实现)
文章平均质量分 64
登 风
这个作者很懒,什么都没留下…
展开
-
数据结构(Java实现)-反射、枚举以及lambda表达式
Java文件被编译后,生成了.class文件,JVM此时就要去解读.class文件 ,被编译后的Java文件.class也被JVM解析为一个对象,这个对象就是 java.lang.Class .这样当程序在运行时,每个java文件就最终变成了Class类对象的一个实例。我们通过Java的反射机制应用到这个实例,就可以去获得甚至去添加改变这个类的属性和动作,使得这个类成为一个动态的类 .无返回值无参数,无返回值一个参数,无返回值多个参数,有返回值无参数,有返回值一个参数,有返回值多参数。会导致程序效率降低。原创 2023-09-03 18:59:11 · 158 阅读 · 0 评论 -
数据结构(Java实现)-字符串常量池与通配符
在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池。“池” 是编程中的一种常见的, 重要的提升效率的方式, 我们会在未来的学习中遇到各种 “内存池”, “线程池”, “数据库连接池” …字符串常量池在JVM中是StringTable类,实际是一个固定大小的HashTable(一种高效用来进行查找的数据结构)通配符的上界,不能进行写入数据,只能进行读取数据。原创 2023-09-03 18:58:44 · 446 阅读 · 0 评论 -
数据结构(Java实现)-Map和Set
开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。那如何寻找下一个空位置呢?由于我们哈希表底层数组的容量往往是小于实际要存储的关键字的数量的,这就导致一个问题,冲突的发生是必然的,但我们能做的应该是尽量的降低冲突率。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。原创 2023-09-03 18:58:19 · 550 阅读 · 0 评论 -
数据结构(Java实现)-排序
排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。插入排序基本思想原创 2023-09-03 18:57:42 · 475 阅读 · 0 评论 -
数据结构(Java实现)-包装类和泛型
上述,返回的Object数组里面,可能存放的是任何的数据类型,可能是String,可能是Person,运行的时候,直接转给Integer类型的数组,编译器认为是不安全的。泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了。装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中。在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。原创 2023-08-27 14:55:04 · 683 阅读 · 0 评论 -
数据结构(Java实现)-优先级队列(堆)
时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适。列在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。如果2 * i + 1 小于节点个数,则节点i的左孩子下标为2 * i + 1,否则没有左孩子。如果2 * i + 2 小于节点个数,则节点i的右孩子下标为2 * i + 2,否则没有右孩子。如果i为0,则i表示的节点为根节点,否则i节点的双亲节点为 (i - 1)/2。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。原创 2023-08-26 21:52:01 · 918 阅读 · 0 评论 -
数据结构(Java实现)-java对象的比较
=默认情况下调用的就是equal方法,但是该方法的比较规则是:没有比较引用变量引用对象的内容,而是直接比较引用变量的地址。在定义类时,实现Comparble接口即可,然后在类中重写compareTo方法。equal只能按照相等进行比较,不能按照大于、小于的方式进行比较。Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较。注意: 一般覆写 equals 的套路就是上面演示的。第二种方法: 基于Comparble接口类的比较。第一种方法:重写equals。第三种方法:基于比较器比较。原创 2023-08-26 21:50:30 · 548 阅读 · 1 评论 -
数据结构(Java实现)-二叉树(下)
检测值为value的元素是否存在(前序遍历)判断一棵树是不是完全二叉树。二叉树的最近公共祖先。原创 2023-08-26 21:48:41 · 794 阅读 · 0 评论 -
数据结构(Java实现)-二叉树(上)
D作为上一次的左子树,走右子树,右子树为null;完全二叉树: 对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。NLR:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点—>根的左子树—>根的右子树。LRN:后序遍历(Postorder Traversal)——根的左子树—>根的右子树—>根节点。上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。原创 2023-08-26 21:46:05 · 689 阅读 · 0 评论 -
数据结构(Java实现)-栈和队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。原创 2023-08-26 21:44:02 · 1000 阅读 · 0 评论 -
数据结构(Java实现)LinkedList与链表(下)
LinkedList的底层是双向链表结构(链表后面介绍),由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。ArrayList和LinkedList的区别。LinkedList的模拟实现。LinkedList的使用。LinkedList的遍历。原创 2023-08-26 21:42:34 · 740 阅读 · 0 评论 -
数据结构(Java实现)LinkedList与链表(上)
无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表。查找是否包含关键字key是否在单链表当中。得到单链表的长度 链表中节点的个数。删除第一次出现关键字为key的节点。删除所有值为key的节点。上述单链表的所有代码。原创 2023-08-26 21:41:06 · 1117 阅读 · 0 评论 -
数据结构(Java实现)-ArrayList与顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。线性表(linear list)是n个具有相同特性的数据元素的有限序列。subList方法,会改变原来对象中0位置处的数据,截取拿到的是地址。ArrayList是以泛型方式实现的,使用时必须要先实例化。用ret来存储所有的行,list用来存储每一行的元素。线性表在逻辑上是线性结构,也就说是连续的一条直线。ArrayList的具体使用。原创 2023-08-26 21:37:49 · 1228 阅读 · 0 评论 -
数据结构(Java实现)-集合与时间和空间复杂度
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)原创 2023-08-20 15:46:13 · 386 阅读 · 0 评论