数据结构
文章平均质量分 95
码农小张~
这个作者很懒,什么都没留下…
展开
-
数据结构-----枚举、泛型进阶(通配符?)
枚举是在JDK1.5以后引入的。但是常量举例有不好的地方,例如:可能碰巧有个数字1,但是他有可能误会为是RED,现在我们可以直接用枚举来进行组织,这样一来,就拥有了类型,枚举类型。而不是普通的整形1.优点:将常量组织起来统一进行管理使用场景:错误状态码,消息类型,颜色的划分,状态机等等…本质:是java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了这个类。原创 2024-04-12 22:04:09 · 1007 阅读 · 0 评论 -
数据结构-----反射
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。Java反射是Java编程语言的一个重要特性,它允许程序在运行时动态地获取类的信息、调用类的方法、访问类的属性等。Java反射的意义在于:动态加载类:Java反射可以在运行时动态加载和实例化类。原创 2024-03-02 15:12:41 · 718 阅读 · 0 评论 -
数据结构-----再谈String,字符串常量池,String对象的创建、intern方法的作用
例如,如果在程序中大量使用字符串常量拼接,每次拼接都会生成一个新的String对象,这种情况下使用StringBuilder或StringBuffer等可变字符串类更合适,因为它们可以避免创建过多临时的String对象。提高效率:由于字符串常量池中的对象是可复用的,当需要创建相同内容的字符串时,可以直接引用常量池中的对象,避免了对象的重复创建和销毁过程,从而提高了程序的执行效率。在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行。原创 2024-02-29 16:14:33 · 964 阅读 · 0 评论 -
数据结构-----二叉搜索树、模拟实现二叉搜索树、Map、Set的使用以及说明、哈希表的概念以及冲突避免的方法、哈希桶的实现、HashMap源码解析、相关OJ练习题
这是因为,当两个对象的内容相同时,它们应该具有相同的哈希码。插入和查找操作的时间复杂度为O(1):虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为哈希表的插入/删除/查找时间复杂度是O(1)。(3) 另外,TreeSet和HashSet的迭代顺序也是不同的,TreeSet的迭代顺序是根据元素的排序顺序,而HashSet的迭代顺序是不确定的,可能会受到散列表的扩容和哈希冲突等因素的影响。原创 2024-02-29 16:14:09 · 974 阅读 · 0 评论 -
数据结构-----排序的概念、常见排序的实现以及排序算法的特点、非比较排序、排序相关例题
快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定归并的缺点在于需要O(N)的空间复杂度,也就是说,申请的临时数组和原数组一模一样,归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度:O(N*logN)空间复杂度:O(N),主要用于存储临时的合并结果。在归并排序过程中,需要额外的O(N)的空间来存储合并操作的中间结果,因此相对于快速排序等原地排序算法,归并排序的空间复杂度较高。原创 2024-02-27 13:20:01 · 791 阅读 · 0 评论 -
数据结构-----优先级队列的概念、模拟实现、特性、常用方法、扩容机制、初始化、堆的应用、Top-K问题
Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,本文主要介绍PriorityQueue。使用时必须导入PriorityQueue所在的包,即:PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常.原创 2024-02-27 13:19:34 · 978 阅读 · 0 评论 -
数据结构-----树形结构、二叉树的介绍
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。根节点(Root):树中的一个特殊节点,它没有前驱节点,是整个树的起点。子树(Subtree):除根节点外,树中的每个节点都可以看作是一棵子树的根节点。子树是一棵与原树类似的树,它包含了一部分原树中的节点和边。前驱节点(Parent)和后继节点(Children):一个节点的前驱节点是其所在子树的根节点,而该节点称为前驱节点的后继节点。原创 2024-02-15 16:14:42 · 824 阅读 · 0 评论 -
力扣例题----二叉树
【题目链接】:100.相同的树【题目描述】:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。【解题过程】:两个二叉树相同,当且仅当两个二叉树的结构完全相同,且所有对应节点的值相同。让两个指针一开始先指向两棵二叉树的根节点,然后同步移动两根指针来同步遍历这两棵树,判断对应位置是否相等。算法实现步骤:【代码】:复杂度分析:【时间复杂度】:O(min(m,n)),其中 m 和 n分别是两个二叉树的节点数原创 2024-02-15 16:13:44 · 1059 阅读 · 0 评论 -
数据结构----队列(Queue)的概念、队列的使用、模拟实现队列、循环队列、模拟实现循环队列、双端队列、模拟实现双端队列
思路:借用辅助栈来实现,入队时将所有入队的元素放入辅助栈(stack1),出队时如果栈(stack2)不为空,那么就从栈(stack2)中读取数据,如果栈(stack2)为空,将辅助栈(stack1)中所有数据颠倒放入栈(stack2)中,再从栈(stack2)中读取数据。循环队列通常包含两个指针,一个指向队列的头部(front),一个指向队列的尾部(rear)。如果rear的下一个元素为front,即为(rear+1)%array.length = front,那么队列就是满的。原创 2024-02-03 18:15:36 · 2108 阅读 · 0 评论 -
数据结构----栈的概念、模拟实现、栈的使用、栈的应用、有关栈的算法题
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。当一个方法被调用时,会在虚拟机栈中创建一个新的栈帧,当方法执行结束时,栈帧会被销毁。虚拟机栈:虚拟机栈是指在计算机中运行的程序中,每个线程都有自己的虚拟机栈,用于存储线程中方法的局部变量、操作数栈、动态链接、返回地址等信息。答案:为C,C选项中先出的元素为3,说明之前入栈的元素为1、2、3,3出栈之后,出栈顺序一定是2在1之前,2不出来,1不可能先出来。原创 2024-02-03 17:44:14 · 964 阅读 · 0 评论 -
力扣、牛客例题-----链表
并且题目中提到不能改变原来的数据顺序,所以。原创 2024-01-28 10:19:45 · 2201 阅读 · 0 评论 -
数据结构----链表介绍、模拟实现链表、链表的使用
链表是一种常见的数据结构,它由一系列节点组成,每个节点包含两部分:数据元素 (value) 和指向下一个节点的指针 ( next 域 )。通过这些节点的连接,可以形成一个链式结构。【单个节点】:节点(Node):链表的基本单元,包含数据域和next指针域。数据域可以是任意类型的数据,指针指向下一个节点。每个节点都是一个对象。【节点组成的链式结构】:结论: 链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。LinkedList 的官方文档。原创 2024-01-29 19:40:52 · 1154 阅读 · 0 评论 -
数据结构----ArrayList的简介、使用、扩容机制、使用ArrayList实现杨辉三角
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:【说明】ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。原创 2024-01-29 19:39:54 · 927 阅读 · 0 评论 -
数据结构----线性表、顺序表、模拟实现顺序表
返回的数组类型与源数组类型相同。线性表是一种在实际中广泛使用的数据结构,指具有相同数据类型的元素按照一定的顺序排列的数据结构,其中每个元素都有唯一的前驱元素和后继元素(除了第一个元素没有前驱,最后一个元素没有后继),常见的线性表:顺序表、链表、栈、队列…顺序表是一种线性表的存储结构,它是由一组地址连续的存储单元依次存储线性表中的元素,元素之间的逻辑关系和物理关系是一致的。如果里面的每一个元素都是引用类型,需要使用equals()来进行比较,如果是自定义类型,还需要自己覆盖equals()方法。原创 2024-01-24 09:32:19 · 733 阅读 · 0 评论 -
数据结构----List简介
List 接口是 ArrayList 类的一个父接口,通过使用 List 类型的引用来指向 ArrayList 对象,可以使代码更具有通用性。这样写的好处是,以后如果需要更改为其他类型的 List(如 LinkedList),只需要改变声明的时候的类型,而不需要修改实例化的代码。List是Java集合框架中的一个接口,它表示一个有序的、可重复的元素集合。List的灵活性和功能丰富性使得它成为Java中常用的集合类型之一,可以方便地操作和管理有序的元素集合。如果要使用,必须去实例化List的实现类。原创 2024-01-24 09:32:00 · 891 阅读 · 0 评论 -
数据结构----集合框架的简单介绍
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。原创 2024-01-22 17:42:19 · 736 阅读 · 0 评论 -
数据结构----基本封装、包装类、装箱与拆箱、泛型详解
由于类型擦除,编译器无法检查类型转换的正确性,返回的Object数组里面,可能存放的是任何的数据类型,可能是String,可能是Person,运行的时候,直接转给Object类型的数组,编译器认为是不安全的。在泛型的擦除过程中,泛型类型参数被替换为其上界或Object类型,因此在编译时无法确定具体的泛型类型。而c和d的值都不在[-128, 127]之间,因此它们不会被缓存起来,每次自动装箱时都会创建一个新的Integer对象,所以c和d指向的不同对象,因此c==d的结果为false。原创 2024-01-22 17:40:50 · 1069 阅读 · 0 评论