![](https://img-blog.csdnimg.cn/20191202234008925.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
Java基础
秃秃等等
一个小小学生!
展开
-
【java】面向对象的三大特性之一----继承
1.继承是面向对象的三大特性之一1.1 继承的概念类的继承就是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。j如果想要声明一个类继承另外一个类,要用extends关键字。1.2 继承的语法class ParentClass{ //属性//方法//构造方法}class chil...原创 2019-10-11 21:01:42 · 515 阅读 · 0 评论 -
【Java】面向对象的三大特性之一--------封装
1.封装封装是面向对象的三大特性之一。1.1 封装(Encapsulation)一般都说对类进行封装,它是指将类的某些信息隐藏在类的内部,即将类中的属性私有化,即使用private关键字来修饰,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问,其中包括用于获取属性值的getXxx()方法和设置属性值的setXxx()方法。1.2 封装的好处提高了代...原创 2019-10-14 19:48:12 · 178 阅读 · 0 评论 -
(数据结构)已知二叉树的序列求它的形状(用java实现)
已知二叉树的序列求它的形状:有三种方法:1.根据前序+中序可以求出2.根据中序+后序可以求出3.只利用“前序”构建二叉树方法一:根据前序+中序可以求出思想:0)一定要先判断长度是否为0 1)前序遍历的第一个元素为二叉树的根结点,再在中序遍历中找根节点的位置leftCount 2)在前序遍历中根节点左边的的数组范围为:[1,leftC...原创 2019-09-04 15:52:28 · 703 阅读 · 0 评论 -
【数据结构】堆、二叉堆(java实现)
1.堆是一种完全二叉树:2.在堆中有两个重要的公式:已知parent下标,left=2*parent+1 right=2*parent+2已知child的下标(不分左右) parent=(child-1)/2;3.堆 1)逻辑上是一种完全二叉树 2)物理上是一个数组4.满足任意位置的值>=它的左右孩子的值 大堆反之 ...原创 2019-09-04 16:19:50 · 259 阅读 · 0 评论 -
【数据结构】7大基于比较的排序(插入排序、希尔排序、选择排序、堆排序)
排序:所谓排序,就是把一串有记录的数组,按照降序或者非降序进行排列(一般默认非降序)稳定性:能保护排序过程中相等的数据相对顺序不变稳定的排序:具备稳定性一.插入排序(直接插入排序)基本定义:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。具体过程:利用减治...原创 2019-09-07 15:20:06 · 695 阅读 · 0 评论 -
【数据结构】7大基于比较的排序(冒泡排序、快速排序、归并排序)
五.冒泡排序思想:冒泡排序就是两个相邻的元素之间进行比较,把最大的冒到最后,一般是比较好理解的//冒泡排序 public static void bubbleSort(int [] array){ for(int i=0;i<array.length-1;i++){ boolean treated=true; ...原创 2019-09-07 16:57:26 · 336 阅读 · 0 评论 -
【Java】对象的比较:Comparable接口和Comparator接口
进行自定义对象的比较时,因为包含很多属性,一般根据这些属性对自定义对自定义对象进行比较,所以java中要比较对象的大小或者要对对象的集合进行排序,需要比较这些对象的属性的大小来确定它们之间的大小关系。java中比较常用比较就是Comparable接口和Comparator接口。一.Comparable接口该接口对实现它的每个类的对象强加一个整体排序。这个排序称为类的自然排序。类的Compa...原创 2019-09-22 12:08:56 · 254 阅读 · 0 评论 -
【Java编程题】连续子数组的最大和
剑指offer42:连续子数组的最大和描述:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。方法1:利用到动态规划1.定义一个值max = array[0];2.定义数组dp,dp[0] = array[0];3.进行遍历选择,选择最大的,...原创 2020-07-23 16:45:23 · 257 阅读 · 0 评论 -
【Java编程题】只出现一次的数字(三个题)
题目1:(136)只出现一次的数字题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4思路:利用运算符异或(^),异或运算的规则:相同为0,相异为1;异或本身的特点:一个数和0做异或等于本身:a^0 = a; 一个数和其本身做异或等于0:a^a = 0; 异或运算满足交换律和结合律:a^b^a = (a^a)^b =.原创 2020-06-24 17:13:24 · 453 阅读 · 0 评论 -
【项目】在线OJ项目总结
1.项目简介仿照leetcode来写一个在线判题系统的项目,用户可以实现通过url在浏览器访问试题列表、选中相关题目并编写代码、提交到服务器编译运行、将结果反馈给浏览器展示在页面等相关操作。2.核心功能题目列表页面,表示当前系统中的所有题目题目详情页面,显示题目的具体要求和代码模板,提供一个编辑框供用户来编辑代码,提交并显示出运行结果;代码的编译、运行、测试功能,能够针对用户提交的代码,进行编译运行,并自动执行测试用例,返回测试结果;3.开发环境maven :使用Maven原创 2020-06-20 17:09:35 · 1607 阅读 · 0 评论 -
【Java】JVM和垃圾回收的基本了解
目录1.JVM介绍1.1 JVM概念2.Java运行时数据区域2.1 线程私有的内存区域2.2 线程共享区域3.常量池的补充4.垃圾回收4.1 如何判断对象已死4.1.1 可达性分析算法4.1.2 引用计数算法4.2 编程语言类型4.3 Java的引用类型(了解)4.4 JVM的GC内存划分4.4.1 虚拟机栈:4.4.2方法区(jdk1.7)/元空间(jdk1.8)4.4.3 堆4.5 垃圾回收的过程4.6 垃圾回收算法4..原创 2020-06-11 16:35:18 · 628 阅读 · 0 评论 -
【Java】Java的类加载机制
1.类加载的介绍从上图可以看出,Java文件通过编译变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中,其中类装载器的作用就是类的加载;类加载概念:它是指将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区内建一个java.lang.Class对象,用来封装类在方法区内的数据结构;类的加载的最终产品是位于堆区内中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内数据结构的方.原创 2020-06-07 19:57:09 · 225 阅读 · 0 评论 -
【Java】设计模式之单例模式介绍
单例模式单例模式是Java中最简单的设计模式之一,这种类型的设计模式属于创建型模式,他提供了一种创建对象的最佳方式;单例模式介绍:所谓单例,就是整个程序有且仅有一个实例,该类负责自己创建自己的对象,同时确保只有一个对象被创建,在Java中,一般常用在工具类的实现或创建对象需要消耗资源。注意:单例模式只能有一个实例; 单例类必须自己创建自己唯一的实例; 单例模式必须给所有其他对象提供这一实例;介绍:意图:保证一类仅有一个实例,并提供一个访问它的全局访问点;主要解决:一个全局使原创 2020-06-05 16:41:33 · 140 阅读 · 0 评论 -
【Java】最大公因数和最小公倍数的算法
1.最大公因数方法1:找出两个数里面的最大值,利用循环进行求解;可以说,这种方法没有经过任何的算法,利用的纯数学的方法; 但是要循环遍历其中较大的正整数,如果两个数量都非常大的话,效率是非常低的;如下:public static int gcd(int a,int b){ int max=(a>b)?a:b; int ...原创 2020-04-16 22:38:51 · 3285 阅读 · 0 评论 -
【Java】在一个有序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
在一个有序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5有两种方法:创建一个虚结点和不创建虚结点方法1:创建一个虚结点1.创建一个假结点fake,让它的下一个结点为head,设Node prev=fake;设p1=...原创 2019-06-21 17:18:47 · 1047 阅读 · 0 评论 -
【Java】以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前,返回重新排列后的链表的头指针。
以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前,返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。思想:将链表分为两部分,一部分存比 x 小的值,一部分存大的值,最后将两个链表连接起来1.设置两个新链表,small,big为null,设置两个结点smalLast,bigList为空,(使这两个结点一直为最后一个结点)2.设cur=h...原创 2019-06-20 22:14:09 · 550 阅读 · 0 评论 -
【Java】删除指定链表中的字符
删除指定链表中的字符方法1:1.创建一个假结点:fake=new Node(1);//假结点,值为多少无所谓使:fake.next=head;Node c1=fake;node c2=head;2.当c2不为空时,if(c2.value=value) //值相等,进行删除{c1.next=c2.next; //就跳过了相等的这个值}else{c1=c...原创 2019-06-19 21:53:16 · 231 阅读 · 0 评论 -
【java】链表的逆置
逆置链表方法1:1.定义一个新链表,一开始为null; Node newNode=null;//newNode有两层含义,1).新链表的第一个结点,2).代表着整个链表2.循环cur,不为空3.因为一会cur.next会变化,所以先将其保存起来 Node next=cur.next4.进行头插 cur.next=newNode; newNode=cur;5.使cur往后遍历...原创 2019-06-19 21:43:49 · 662 阅读 · 0 评论 -
【Java】将两个有序链表合并为一个有序链表
java中将两个有序链表合并为一个有序链表:1.必须保证两个链表为有序链表2.在两个链表都不为空的条件下,设一个 last=null;(1)如果链表1的值小于等于链表2的值,进行循环,先放链表1的值到新链表result,如果result为空,视为头插,如果不为空,视为尾插,其中要保证last永远为最后一个结点,最后让循环走起来(2)如果链表2的值小于链表1的值,与(1)中方法相同,...原创 2019-06-08 11:45:43 · 10817 阅读 · 4 评论 -
【Java】在链表中找倒数第K个值
java在链表中找倒数第k个值:方法1:先求出链表的长度length,再利用length-k重新遍历,其中,当length<k时,那就没有这个值,需返回null;方法2:设置两个结点,利用双引用遍历,让结点1先遍历k次,走在节点2的前面,其中要注意结点1为null时返回;然后再在结点1不为空时,先走结点1,再走结点2,直至结点1为空;最后返回结点2//找倒数第k个值, 法1...原创 2019-06-08 11:14:45 · 373 阅读 · 0 评论 -
【数据结构】二叉树遍历(Java实现)
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。题目链接:https://www.nowcoder.com/practice/4b91205483694f449f94c17988...原创 2020-03-29 20:34:16 · 644 阅读 · 0 评论 -
【数据结构】二叉树的层次遍历(java实现)
层次遍历:从上到下再从左到右(树的广度优先,需要用到队列)1.把根放到队列中,2,循环直到队列为空1)把队首结点取出2)把队首结点的左右孩子取出(无得话,不插入) //层次遍历 public static void levelOrderTraversal(Node root){ if(root==null){ return;...原创 2019-08-28 17:04:28 · 2001 阅读 · 0 评论 -
【数据结构】二叉树的前序、中序、后序(用java实现)
他们都是一种深度遍历方式一:前序遍历 遍历方式为:根+左子树的前序+右子树的前序递归方法:利用递归方法,先打印根节点,再递归遍历左子树的前序,最后递归调用有右子树的前序,如果它的根节点为空时,直接返回null //前序遍历,法1 public static void preOrderTraversal(Node root){ if(ro...原创 2019-08-27 23:31:48 · 175 阅读 · 0 评论 -
【Java编程题】字母统计
题目:字母统计题目链接:https://www.nowcoder.com/questionTerminal/de7bf0945c1c4bd1aa9d49573b831f3c题目描述:输入一行字符串,计算其中A-Z大写字母出现的次数输入描述:案例可能有多组,每个案例输入为一行字符串。输出描述:对每个案例按A-Z的顺序输出其中大写字母出现的次数。示例1输入DFJEIWFN...原创 2020-03-19 17:33:27 · 533 阅读 · 0 评论 -
【Java编程题】删除公共字符串
题目:删除公共字符串题目链接:https://www.nowcoder.com/questionTerminal/f0db4c36573d459cae44ac90b90c6212题目描述:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”输入描述:...原创 2020-03-12 22:41:36 · 442 阅读 · 0 评论 -
【Java编程题】字符串中找出连续最长的数字串
牛课题:字符串中找出连续最长的数字串题目描述:读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。题目链接:https://www.nowcoder.com/questionTerminal/bd891093881d4ddf9e56e7cc8416...原创 2020-03-08 22:37:17 · 1500 阅读 · 0 评论 -
【Java编程题】寻找第K大
牛课题:寻找第K大题目说明:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。题目链接:https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf方法1:根据题意利用简单的编程思...原创 2020-03-06 16:28:15 · 536 阅读 · 0 评论 -
【Java】进程和线程的概念、区别和联系
进程和线程的区别原创 2020-03-05 18:50:56 · 223 阅读 · 0 评论 -
【Java】Java传值调用和传引用调用(实参和形参)
相关的基本概念:形参:定义方式时写的参数为形参 实参:真正调用方法时,传入的参数为实参。 在我们调用方法时,会把实参传递给形参,方法内部其实是在使用形参。 传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。 传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。 基本数据类型:有八种整数类...原创 2020-03-01 19:32:20 · 7100 阅读 · 0 评论 -
【Java】多线程的基本知识
1.线程1.1 概念进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程。线程:CPU调度的最小单位多线程的优势:增加运行速度1.2 创建线程1.2.1 继承Thread类通过继承Thread 来创建一个线程类,该方法的好处是this代表的就是当前线程,不需要通过Thread.curr...原创 2020-02-27 20:22:22 · 96 阅读 · 0 评论 -
【Java编程题】在数组中找到出现次数大于一半的数
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。实现方法1:利用中位数第一步:对数组先进行排序第二步:如果出现次数要大于数组的一半,则数组下标为数组长度一半的这个数一定为要求的这个数第三步:从前到后统计这个数...原创 2020-02-21 16:58:04 · 910 阅读 · 0 评论 -
【Java】面向对象的三大特性之一------多态
1.多态1.1多态的产生程序员在开发过程中,需要在代码中编写很多方法,其次,很多方法的形式差不多,那么到最后调用方法时就会很容易出错,看下面的例子:public class Test{ int x; int y; int z; void print1(int x){ System.out.println(x); } ...原创 2019-10-14 22:02:45 · 220 阅读 · 0 评论 -
【Java】String类
1.创建字符串1.1 常见的构造String的方式//方式1String str="Hello";//方式2String str2=new String("Hello");//方式3char [] array={'a','b','c'};String str3=new String(array);注意:"hello"这样的字符串字面值常量,类型也是StringSt...原创 2020-01-18 19:13:13 · 188 阅读 · 0 评论 -
【Java】异常
目录1.异常的背景1.1初识异常1.2 防御式编程1.3 异常的好处2.异常的基本用法2.1 捕获异常2.2 异常处理流程2.3 抛出异常2.4 异常说明2.5 关于finally的注意事项3.Java异常体系4.自定义异常类1.异常的背景1.1初识异常我们平常接触到的异常:1)除以0System.out.println(...原创 2020-01-16 18:10:42 · 109 阅读 · 0 评论 -
【Java】抽象类和接口
目录1.抽象类1.1 抽象类的定义与使用1.2 抽象类的相关规定1.3 抽象类的作用2.接口3.1 接口的基本概念2.2 接口使用限制2.3 接口的应用3.抽象类与接口的区别(重点)1.抽象类1.1 抽象类的定义与使用抽象类只是在普通类的基础上扩充了一些抽象方法而已,所谓的抽象方法指的是只声明而未实现的方法(没有方法体)。所有抽象方法要求使用...原创 2020-01-15 11:47:21 · 142 阅读 · 1 评论 -
【Java】static关键字
1.static关键字1.1静态变量传统属性所具备的特征:保存在内存中,且每个对象独享属性。在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的实例化对象后,系统才会为每个对象分配空间,存储各自的数据。有时候,我们希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享。例如某个学院所有学生贡献同一个学生名称,此时安全不必...原创 2020-01-13 18:25:27 · 147 阅读 · 0 评论 -
【Java】构造方法
构造方法1.构造方法的引入如果需要在实例化对象的时候就为这个对象进行赋值,就可以通过构造方法来实现,构造方法石磊的一个特殊成员,他会在类实例化是被自动调用。如何产生对象:a 类名称 b 对象名称 = c new d 类名称();分析:a 任何对象都应该有其对应的类,类是对象的蓝图 b 是一个唯一的标记,引用一块堆内存 c 表示开辟新的堆内存空间 d 构造方法2...原创 2019-11-05 22:25:19 · 199 阅读 · 0 评论 -
【Java】内部类
内部类1.内部类的定义与应用1.1基本概念内部类:在一个类的内部定义类范例:class Outer{ private String str="hello"; //定义一个内部类 class Inner{ //定义一个普通方法 public void print(){ System.out.prin...原创 2019-10-27 15:27:46 · 200 阅读 · 0 评论 -
【Java】单例模式
单例模式也称为饿汉模式1.1介绍单例模式是java中一种简单的设计模式之一,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确定只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:单例类只能有一个 单例类必须自己创建自己的唯一实例 单例类必须给...原创 2019-10-20 22:43:08 · 142 阅读 · 0 评论 -
【java】int和integer区别
1.int是java中一种基本数据类型,Integer是int的包装类型(引用类型)默认值:int i=0; Integer i=null;2.int实例不需要实例化即可使用,而Integer变量需要实例化才能使用,但是java中有自动装箱、拆箱的功能,所以Integer num=200;的写法实际上也是实例化;3.int 变量和Integer变量的==比较:(1)...原创 2019-10-08 16:30:24 · 195 阅读 · 0 评论