自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Java对象的比较

从编译结果可以看出,Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较。因为:对于用户实现自定义类型,都默认继承自Object类,而Object类中提供了equal方法,而 == 默认情况下调用的就是equal方法,但是该方法的比较规则是:没有比较引用变量引用对象的内容,而是直接比较引用变量的地址,但有些情况下该种比较就不符合题意。优先级队列底层使用堆,而向堆中插入元素时,为了满足堆的性质,必须要进行元素的比较,而此时Card是没有办法直接进行比较的,因此抛出异常。c1== c2 编译成功。

2023-10-23 16:00:41 44

原创 优先级队列(堆)

Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,这里主要介绍PriorityQueue。使用时必须导入PriorityQueue所在的包,即:PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常。

2023-10-23 14:54:30 59 1

原创 二叉树介绍

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:1, 有一个特殊的结点,称为根结点,根结点没有前驱结点2,除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti (1

2023-10-23 10:31:22 49

原创 Stack和Queue

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)。从上图中可以看到,Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的。所以栈可以解决很多问题,如:改变元素的序列,,将递归转化为循环,括号匹配,出栈入栈次序匹配,最小栈等问题。

2023-10-09 20:09:47 40

原创 单链表的自定义实现

Override@Override@Override@Override@Override@Override@Override@Override@Override单链表是由一个个节点构成的:因此需要在SingleLinkedList类中添加一个ListNode内部类,该类有两个成员变量:分别是int类型的val和ListNode类型的next。同时也需要定义一个int类型的usedsize来记录节点的个数和定义ListNode类型的head来存放头节点的地址。

2023-09-20 22:31:35 163

原创 LinkedList与链表

LinkedList 的官方文档LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。在集合框架中,LinkedList也实现了List接口,具体如下:LinkedList实现了List接口。LinkedList的底层使用了双向链表。LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问。

2023-09-20 19:42:41 39

原创 杨辉三角和简单的洗牌算法

有一副新的扑克牌,将其洗乱存到一个数组中并打印出来,然后按每人轮流抓5张牌分给3个人,将每个人的牌打印出来。(没有大小王,A,J,Q,K分别当作1,11,12,13)给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。可以将该问题转化为以上等价的模型,其就相当于一个二维数组,由于每个数组所存的数的个数不同,因此可以用顺序表来解决。

2023-09-16 15:24:10 64

原创 顺序表的自定义实现

2,创建一个顺序表类实现这个接口,定义一些成员变量,并对实现的方法进行重写。1,创建一个接口,里面定义一些顺序表需要的方法。以上就是一个简单的顺序表的实现过程。

2023-09-16 10:22:53 48 1

原创 ArrayList与顺序表

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList是以泛型方式实现的,使用时必须要先实例化。ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。ArrayList实现了Cloneable接口,表明ArrayList是可以clone的。ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

2023-09-16 10:13:44 58 1

原创 List接口介绍

在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。

2023-09-14 21:40:52 31 1

原创 包装类和认识泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。方法限定符 返回值类型 方法名称(形参列表) { … }

2023-09-14 21:28:45 144 1

原创 时间和空间复杂度

时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。基本操作执行最好N次,最坏执行了(N*(N-1))/2次,通过推导大O阶方法+时间复杂度一般看最坏,时间复杂度为 O(N^2)。法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。

2023-09-14 15:51:25 47 1

原创 初识集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util包下的一组接口 interfaces和其实现类 classes。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理manipulate ,即平时我们俗称的增删查改 CRUD。例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。

2023-09-14 15:05:32 50 1

原创 Comparable接口和Cloneable接口

Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”, 但是要想合法调用 clone 方法, 必须要先实现 Clonable 接口, 否则就会抛出 CloneNotSupportedException 异常。注意事项: 对于 sort 方法来说, 需要传入的数组的每个对象都是 “可比较” 的, 需要具备 compareTo 这样的能力。仔细思考, 不难发现, 和普通的整数不一样, 两个整数是可以直接比较的, 大小关系明确,而两个学生对象的大小关系怎么确定?

2023-09-11 16:57:24 125

原创 异常的简单了解

Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构。if (!if (!System.out.println("登陆成功");此时我们在处理用户名密码错误的时候可能就需要抛出两种异常,我们可以基于已有的异常类进行扩展(继承), 创建和我们业务相关的异常类。具体方式:1,自定义异常类,然后继承自Exception 或者 RunTimeException。

2023-09-09 11:35:15 36 1

原创 String类的三个例题

题目:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。示例:输入:输出:8说明:最后一个单词为nowcoder,长度为8解题思路:使用lastIndexOf(String str)方法查找最后一个空格的下标,则最后一个空格以后即为最后一个单词。

2023-09-06 13:00:23 192 1

原创 认识 String 类

在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。频繁修改字符串的情况考虑使用StringBuilder。可以看待在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量使用StringBuffer或者StringBuilder。

2023-09-05 23:16:16 160 1

原创 认识Object类

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。//执行结果:所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法。如下:对于整个Object类中的方法需要实现全部掌握。目前先讲解一下toString()方法,equals()方法,hashcode()方法。

2023-09-05 08:47:05 34

原创 抽象类和接口

在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape的各种子类的 draw 方法来完成的。在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。2, 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)。

2023-09-04 19:52:58 32 1

原创 继承和多态

在子类构造方法中,并没有写任何关于父类构造的代码,但是在构造子类对象时,先执行父类的构造方法,然后执行子类的构造方法,因为:子类对象中成员是有两部分组成的,父类继承下来的以及子类新增加的部分。例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅可以显示号码,还可以显示头像,地区等。在这个过程当中,我们不应该在原来老的类上进行修改,因为原来的类,可能还在有用户使用,正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我们当今的需求了。

2023-09-02 09:41:30 35

原创 类和对象的介绍

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。

2023-08-28 14:27:09 41

原创 数组的定义与使用

数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:数组中存放的元素其类型相同。数组的空间是连在一起的。每个空间有自己的编号,其实位置的编号为0,即数组的下标。那在程序中如何创建数组呢?

2023-08-24 00:19:22 32 1

原创 方法的使用

方法就是一个代码片段,类似于 C 语言中的 “函数”。是能够模块化的组织代码(当代码规模比较复杂的时候)。做到代码被重复使用, 一份代码可以在多个位置使用。让代码更好理解更简单。直接调用现有方法开发, 不必重复造轮子。System.out.println(year+"年是闰年");}else{System.out.println(year+"年不是闰年");那方法该如何来定义呢?方法语法格式:// 方法定义修饰符 返回值类型 方法名称([参数类型 形参 …]){方法体代码;

2023-08-23 17:10:08 24

原创 程序逻辑控制

为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件 num

2023-08-22 21:38:30 31

原创 了解运算符

计算机的最基本的用途之一就是执行数学运算,比如:int a = 10;int b = 20;a + b;a < b;上述 + 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - */)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。

2023-08-21 22:13:01 30

原创 数据类型与变量

/ s1+s2表示:将s1和s2进行拼接int 转成 String// 方法1// 方法2String 转成 int这只是对字符串进行简单的介绍,后序会再详细介绍。

2023-08-21 16:18:47 27 1

原创 初识Java

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。

2023-08-14 15:14:28 27

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除