数据结构
文章平均质量分 92
用Java语言学习数据结构~
芋泥*
方寸之间,大有可为
展开
-
【数据结构】反射
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。原创 2023-04-13 20:14:17 · 543 阅读 · 8 评论 -
【数据结构】用Java实现七大排序算法
该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的。1959年Shell发明,第一个突破O(n^2)的排序算法,是简单插入排序的改进版。原创 2023-04-12 19:22:00 · 993 阅读 · 11 评论 -
区分ArrayList与LinkedList,List与Set,TreeMap与HashMap,TreeSet与HashSet
第二个对象开始进入集合,hashset先根据第二个对象在堆内存的地址调用对象的计算出一个hash值,如果第二个对象和第一个对象在堆内存里的地址是相同的,那么得到的hash值也是相同的,直接返回true,hash得到true后就不把第二个元素加入集合(这段是hash源码程序中的操作)。当我们将一个对象加入treeset中,treeset会将第一个对象作为根对象,然后调用对象的compareTo方法拿第二个对象和第一个比较,当返回至=0时,说明2个对象内容相等,treeset就不把第二个对象加入集合。原创 2023-04-09 09:07:21 · 683 阅读 · 12 评论 -
【数据结构】用Java实现哈希表
因此只要表中有一半的空位置,就不会存在表满的问题。设有n个d位数,每一位可能有r种不同的符号,这r种不同的符号在各位上出现的频率不一定相同,可能在某些位上分布比较均匀,每种符号出现的机会均等,在某些位上分布不均匀只有某几种符号经常出现。比如上面的场景,现在需要插入元素44,先通过哈希函数计算哈希地址,下标为4,因此44理论上应该插在该位置,但是该位置已经放了值为4的元素,即发生哈希冲突。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。原创 2023-04-08 11:29:42 · 1147 阅读 · 10 评论 -
【数据结构】Map与Set
1. 概念。以前常见的搜索方式有:,时间复杂度为O(N),元素如果比较多效率会非常慢,时间复杂度为,但搜索前必须要求序列是有序的上述排序比较适合,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:(1)根据姓名查询考试成绩(2)通讯录,即根据姓名查询联系方式(3)不重复集合,即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入和删除的操作,即,那上述两种方式就不太适合了,本节介绍的Map和Set是一种适合动态查找的集合容器。原创 2023-04-05 21:27:14 · 381 阅读 · 10 评论 -
【数据结构】用Java实现二叉搜索树(二分搜索树)
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树一般来说二叉搜索树不存在重复的元素(JDK中的二叉搜索树也不存在重复的元素)原创 2023-04-05 17:37:25 · 1196 阅读 · 8 评论 -
【数据结构】Java中的对象比较
集合框架中的PriorityQueue底层使用堆结构,因此其内部的元素必须要能够比大小,PriorityQueue采用了: Comparble和Comparator两种方式。1. Comparble是默认的内部比较方式,如果用户插入自定义类型对象时,该类对象必须要实现Comparble接口,并覆写compareTo方法2. 用户也可以选择使用比较器对象,如果用户插入自定义类型对象时,必须要提供一个比较器类,让该类实现Comparator接口并覆写compare方法。原创 2023-04-02 11:36:00 · 551 阅读 · 9 评论 -
【数据结构】用Java实现优先级队列&堆
如果有一个关键码的集合K = {k0,k1, k2,…前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话;将parent与较小的孩子child比较,如果:parent小于较小的孩子child,调整结束.否则:交换parent与较小的孩子child,交换完成之后,parent中大的元素向下移动,可能导致子。原创 2023-04-01 07:54:02 · 463 阅读 · 11 评论 -
【数据结构】用Java实现一棵二叉树
这里给出从前序与中序遍历序列构造二叉树、从中序与后序遍历序列构造二叉树以及二叉树的基本操作。原创 2023-03-30 11:07:50 · 3669 阅读 · 10 评论 -
【数据结构】实现二叉树的基本操作
二叉树的前序、中序、后序以及层序遍历,获取节点个数,判断是否为完全二叉树等~原创 2023-03-26 10:52:14 · 3074 阅读 · 4 评论 -
【数据结构】二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1原创 2023-03-24 17:21:46 · 1015 阅读 · 7 评论 -
【数据结构】Java实现队列与循环队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Front)原创 2023-03-23 12:49:48 · 1990 阅读 · 3 评论 -
【数据结构】Java实现栈
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。原创 2023-03-23 12:20:36 · 4460 阅读 · 3 评论 -
【数据结构】Java实现单链表
由于其底层是一段连续空间,当,效率比较低,因此。因此:java集合中又引入了LinkedList,即链表结构。链表是一种存储结构,数据元素的是通过链表中的次序实现的。实际中链表的结构非常多样,以下情况组合起来就有6种链表结构:(2)虽然有这么多的链表的结构,但是我们重点掌握两种,一般不会单独用来存数据。实际中更多是作为,如哈希桶、图的邻接表等等。在Java的集合框架库中LinkedList底层实现就是无头双向循环链表。原创 2023-03-18 22:41:31 · 1337 阅读 · 6 评论 -
【数据结构】Java实现双向链表
LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。原创 2023-03-20 12:47:37 · 1880 阅读 · 4 评论 -
【数据结构】用Java实现动态数组
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。原创 2023-03-18 18:15:24 · 1205 阅读 · 1 评论 -
【数据结构】包装类&泛型
在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 泛型:就是适用于许多许多类型原创 2023-03-18 11:37:37 · 498 阅读 · 3 评论 -
【数据结构】:时间复杂度与空间复杂度
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法中的基本操作的执行次数,为算法的时间复杂度,空间复杂度是对一个算法在运行过程中 临时占用存储空间大小的量度 。,原创 2023-03-06 08:53:53 · 227 阅读 · 1 评论