
Java数据结构
文章平均质量分 87
ZIYE_190
这个作者很懒,什么都没留下…
展开
-
Java数据结构之集合框架和算法
一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。使用大O的渐进表示法以后,Func1的时间复杂度为:O(n^2)原创 2023-03-25 12:49:41 · 394 阅读 · 0 评论 -
Java数据结构之泛型
不可以,因为添加元素的时候,我们知道list引用的对象肯定是Person或者Person的父类的集合,我们能够确定此时存储的元素的最小粒度比Person小的都可以。但是,你读取的时候,你知道是读取到的是哪个子类吗?通俗讲就是:返回的Object数组里面,可能存放的是任何的数据类型,可能是String,可能是Person,运行的时候,直接转给Intefer类型的数组,编译器认为是不安全的。1、泛型 T 是确定的类型,一旦你传了我就定下来了,而通配符则更为灵活或者说是不确定,更多的是用于扩充参数的范围.原创 2023-03-25 20:36:42 · 316 阅读 · 0 评论 -
Java数据结构——顺序表与单向链表的简单实现
【代码】Java数据结构——顺序表与单向链表的简单实现。原创 2023-03-21 20:41:41 · 129 阅读 · 0 评论 -
Java数据结构之ArrayList与顺序表
ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容:以下是ArrayList源码中扩容方式。原创 2023-03-26 11:38:25 · 279 阅读 · 0 评论 -
Java数据结构之LinkedList与链表
LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。,效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此:java集合中又引入了LinkedList,即链表结构。由于其底层是一段连续空间,当在。存储结构,数据元素的。原创 2023-03-27 21:56:05 · 357 阅读 · 0 评论 -
Java数据结构之栈和队列
栈区:线程私有的,栈区中存放的是函数调用相关的一些信息,主要是栈帧。当中的元素(栈帧)是按照数据结构中的栈的特性来实现的。每个方法在运行时,jvm都会创建一个栈帧,然后将栈帧压入到虚拟机栈中,当方法调用结束时,该方法对应的栈帧会从虚拟机栈中出栈。从上图中可以看到,Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的。:后进先出的一种数据结构——在java的集合中有对应的实现—Stack,Stack在实现时继承了Vector。原创 2023-03-28 14:48:33 · 424 阅读 · 0 评论 -
Java数据结构之优先级队列(堆)
Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。将剩余N-K个元素依次与堆顶元素比完之后,堆中剩余的K个元素就是所求的前K个最小或者最大的元素。TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。,kn-1},把它的所有。原创 2023-03-29 16:35:59 · 875 阅读 · 0 评论 -
Java数据结构之二叉树
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。在遍历二叉树时,如果没有进行某种约定,每个人都按照自己的方式遍历,得出的结果就比较混乱,如果按照某种规则进行约定,则每个人对于同一棵树的遍历结果肯定是相同的。:若一个结点含有子结点,则这个结点称为其子结点的父结点;非终端结点或分支结点:度不为0的结点;:一个结点含有的子树的根结点称为该结点的子结点;原创 2023-03-28 21:15:41 · 296 阅读 · 0 评论 -
Java数据结构之排序
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。原创 2023-04-01 12:11:36 · 769 阅读 · 0 评论 -
Java数据结构之Map和Set
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以。Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式。而Map中存储的就是key-value的键值对,Set中只存储了Key。:Map.Entry<K,V>并没有提供设置Key的方法。原创 2023-04-01 16:04:25 · 261 阅读 · 0 评论 -
Java数据结构之二叉搜索树
对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能。原创 2023-04-02 11:53:45 · 364 阅读 · 0 评论 -
Java数据结构之哈希表
线性探测的缺陷是产生冲突的数据堆积在一块,这与其找下一个空位置有关系,因为找空位置的方式就是挨着往后逐个去找,因此二次探测为了避免该问题,找下一个空位置的方法为: = ( + )% m, 或者:= ( - )% m。虽然哈希表一直在和冲突做斗争,但在实际使用过程中,哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O( ),搜索的效率取决于搜索过程中元素的比较次数。该方式即为哈希(散列)方法,原创 2023-04-03 14:57:11 · 325 阅读 · 0 评论 -
Java数据结构之反射
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java的反射(reflection)机制。原创 2023-04-04 16:58:38 · 559 阅读 · 0 评论 -
Java数据结构之枚举
枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来场景:错误状态码,消息类型,颜色的划分,状态机等等…本质:是 java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了这个类。原创 2023-04-05 11:53:37 · 510 阅读 · 0 评论 -
Java数据结构之Lambda表达式
lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式本质是一个匿名函数,函数的方法是:返回值 方法名 参数列表 方法体。在,Lambda表达式中我们只需要关心:参数列表 方法体。为了能够让Lambda和Java的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与Lambda表达式对接。该方法表示:对Map中的每个映射执行action指定的操作。该方法表示:对容器中的每个元素执行action指定的动作。原创 2023-04-05 12:43:20 · 695 阅读 · 0 评论