
java学习
草里多
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
String字符串的比较(java)
经常我们都会遇到关于java字符串的比较这种现象,在这里总结一下首先看一段代码: public static void main(String[] arg){ String s1=new String("123"); String s2=new String("123"); String s3=new String("123"); System.out.println(s1==s1); System.out.println原创 2021-08-14 21:11:05 · 4025 阅读 · 0 评论 -
详解抽象类和接口的区别
首先了解两者的区别的话,先分别了解一下两个的含义:抽象类:抽象类是含有抽象方法,并且被abstract修饰的类。接下来我们来了解一下什么是抽象方法:抽象方法是被abstract修饰的方法,抽象方法只有声明,没有具体的实现。例如:abstract void fun();假如一个类含有抽象方法,那么这个类就是抽象类,那么这个类就需要使用abstract修饰。抽象类是不可以被实例化的,所以抽象类就适合被继承,如果一个抽象类没有被继承,那么这个抽象类就是白写了,没有任何意义。继承抽象类,就要实现抽象转载 2021-06-16 15:38:30 · 240 阅读 · 0 评论 -
final、finally、finalize到底有什么区别呢
在学习java的过程中,我们总会遇到final、finally、fanalize这三个词,那这三个词到底是什么意思呢?或者说有什么用呢?我再这里总结一下,提供以后使用。Final是java里面的一个修饰词,他可以修饰类、方法、变量。final修饰一个类。表明该类不能被其他类继承,是一个最终类,并且在类里面所定义的成员方法也是隐含修饰为final。final修饰一个方法。表明该方法是最终方法,是不能通过继承该类来实现这个方法的,也不能够通过重写来改变方法。若父类中final方法的访问权限为priv原创 2021-06-14 14:42:57 · 1302 阅读 · 1 评论 -
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)示例1输入[4,8,6,12,16,14,10]返回值true思路分析:二叉搜索树的特点是:如果当前节点有左子树,那么左子树的每一个节点的值都小于等于当前节点的值;如果当前节点有右子树,那么右子树的每一个点的值大于当前节点的值;再来分析:树的后序遍历特点是什么,遍历顺序肯定是先左子树,后右子树,最原创 2021-03-16 17:18:32 · 1542 阅读 · 0 评论 -
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入复制{5,4,#,3,#,2,#,1}返回值复制[5,4,3,2,1]解题思路:使用一个队列来存储节点,每次从队列里面取出一个元素,同时将他的两个孩子节点放进队列里面。从而实现层序遍历代码实现:import java.util.ArrayList;import java.util.*;/**public class TreeNode { int val = 0; TreeNode left原创 2021-03-14 21:39:20 · 234 阅读 · 0 评论 -
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动。
题目描述:开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; %; YAD; 等。下面是一个简单的例子 如:A10;S20;W10;D30;X;A1A;B10A11;;A10;处理过程:起点(0,0)A10 = (-10,原创 2021-03-13 13:41:44 · 2243 阅读 · 8 评论 -
给定无序整数序列,求连续子串最大和。
题目描述:给定无序整数序列,求连续子串最大和,例如{-23 17 -7 11 -2 1 -34},子串为{17,-7,11},最大和为21输入描述:输入为整数序列,数字用空格分隔,如:-23 17 -7 11 -2 1 -34输出描述:输出为子序列的最大和:21思路:使用两个变量分别存储子数组最大的值,和当前位置子数组最大的值。遍历数组,并且每次都要判断当前最大值是否小于0,如果小于零就舍弃掉,因为会拉低后面的值。并且面次更新子数组和的最大值。import java.util.Scanner原创 2021-03-13 10:11:04 · 415 阅读 · 0 评论 -
操作给定的二叉树,将其变换为源二叉树的镜像。
题目要求:操作给定的二叉树,将其变换为源二叉树的镜像。解题思路:将根节点的两个子树交换。递归完成。代码:public class Solution { public void Mirror(TreeNode root) { if(root==null){ return; } TreeNode temp=root.right; root.right=root.left; root.left原创 2021-03-12 23:36:59 · 113 阅读 · 0 评论 -
super关键字详解
super注意点:1.super调用父类的构造方法,必须在构造方法的第一个2.super必须只能出现在子类的方法或者构造方法中!3.super和this不能同时调用构造方法!super和this的区别:代表的对象不同:this:本身调用者这个对象super:代表父类对象的应用前提:this:么有继承也可以使用super:只能在继承情况下才可以使用构造方法:this():本类的构造super():父类的构造以类来组织代码;以对象来封装数据有了有参构造,想用无参构造,就必须显式的定义原创 2021-03-12 23:36:07 · 144 阅读 · 0 评论 -
java字符串反转有哪些方法呢?
java中字符串反转是一个常见的题目,那么今天来总结一下在java中反转字符串的方法到底有哪些:1、使用java库函数中的方法reverse() private static String reverse1(String s) { StringBuilder st=new StringBuilder(s); return st.reverse().toString(); }2、转化为字符数组进行拼接:private static String revers原创 2021-03-11 20:34:59 · 1803 阅读 · 0 评论 -
JVM的主要组成以及作用你知道吗
JVM是Java Virtual Machine 的缩写,正如他的英文名字,中文名字叫java虚拟机。先来看看java虚拟机的结构吧!JVM是有两个子系统和两个组件组成。两个子系统:类加载系统和执行引擎系统;两个组件:运行时数据区域和本地接口区域。我们知道我们写的java文件(源文件),会先通过编译器(javac命令)编译成为字节码文件(.class文件)。然后运行字节码就是java命令完成,而这个过程就是将字节码文件翻译成机器语言,再让机器做一系列的操作的。这一系列的过程就是由JVM来完成的。原创 2021-03-09 13:48:42 · 418 阅读 · 3 评论 -
java的强引用、软引用、弱引用、虚引用是什么
转载这里jdk1.2之前有两种引用,“已经被引用”和“未被引用”。可是在某些特定 的情况下无法描述一些现象。例如在内存紧张的时候需要抛弃一些对象。所以在jdk1.2之后,就把引用分为了了四种:强引用、软引用、弱引用、虚引用。下面介绍一下这四种引用:强引用强引用:在我们使用的大部分情况下,都是强引用。例如Object o=new Object();只要o还指向object对象,object对象就不会被回收;只要强引用存在,那么就不会回收这个引用所指向的对象。就算内存不足,jvm也只会抛出异常。而原创 2021-03-08 09:59:21 · 87 阅读 · 0 评论 -
详解方法的重写和重载的区别
java学习的过程中,一定会听说的两个概念:重写和重载。先来了解一下什么是重写什么是重载:重写:是发生在父类和子类之间的,要求被重写的方法名字一定要和原方法的名字,参数类型、参数个数、返回值类型相同。被重写的方法修饰限定符的限定范围一定要大于等于原方法的修饰限定符限定范围;被重写的方法抛出的异常类型一定要是原方法异常类型的子类或者原方法的异常。重写是在运行时起作用的。重写是父类和子类之间的多态性体现。接下来了解一下什么是重载:重载:是发生在同一个类里面的。重载的方法名要和原方法名相同;必须要有原创 2021-03-06 10:17:51 · 228 阅读 · 1 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入{8,8,#,9,#,2,#,5},{8,9,#,2}返回值true解题思路:遍历树a,找到与树b根节点相同的节点,从这个节点开始,a树和b树同时向下遍历。遍历如果发现该过程中有节点的值不相等那就返回false;如果值相等就继续向下遍历。遍历的出口是有一个树的节点为空了。根据这个结果判断:如果树a为空了,那说明b不是a的子树。如果b树为空了,说明b树是a树的子结构。代码展示:.原创 2021-02-23 13:56:18 · 456 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
题目描述:输入一个链表,输出该链表中倒数第k个结点。示例1输入1,{1,2,3,4,5}返回值{5}解题思路:定义两个指针,先让一个指针走k步,然后两个指针一起走,最终到达终点,满的指针就是题目所求。public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode fast=head; ListNode slow=head; fo原创 2021-02-21 17:30:35 · 133 阅读 · 0 评论 -
为什么要配置java环境变量
刚刚开始学习java的时候,我们总是需要配置换将变量。那到底为什么要配置环境变量呢?今天我们就来聊一下原因。我们知道当我们装了java但是没有配置环境变量的时候,我们是不能使用java等命令的。会有如下提示:我们再次找到java的jdk包,在这个文件夹下面打开bin目录。在此路径下打开CMD。具体做法是这样的:点击图上的路径一栏输入cmd并回车就可以打开。我们在这个路径输出java(其实java命令就是运行java.exe ,这个课执行文件是在bin目录下的),如图所示:所以说没有配置原创 2021-02-20 15:51:49 · 1363 阅读 · 0 评论 -
String、StringBuilder、StringBuffer的比较
经常我们会对Sting/stringBuffer/StringBuilder 几个区分不清楚,所以写一篇博客总结一下:String的值是不可修改的,并且每次对String操作都会生成新的对象,浪费大量的空间;Stringbuffer值是可以改变的,效率一般,线程安全StringBuilder的值可以改变,效率较高,线程不安全1.三者值的可变性String不可变,是因为在String底层实际上是一个字符数组,是定长的。来看一下String的原码:/** The value is used f原创 2021-02-18 16:16:33 · 147 阅读 · 0 评论 -
请编写一个方法,输出0到(包括n)中数字2出现了几次。 给定个正整教n, 请返回0到的数字中2出现了几次。
题目要求:请编写一个方法,输出0到(包括n)中数字2出现了几次。给定个正整教n, 请返回0到的数字中2出现了几次。代码展示:public class Main { public static void main(String args[]){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int sum=0; for(int i=0;i<=n;++i){原创 2021-02-03 21:15:32 · 658 阅读 · 0 评论 -
两种解法-----判断一个数是不是守形数
什么是守形数呢,先来了解一下:根据这个要求写出代码如下解法一:根据守形数定义,判断平方后的结果的低位数是否和原数相等package Num;/** 判断一个数是不是守形数* */import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()原创 2021-01-28 11:22:12 · 1131 阅读 · 0 评论 -
学分绩点计算
题目要求:北京大学对本科生的成绩施行平均学分绩点制(GPA)。既将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。 公式如下: 实际成绩 绩点 90——100 4.0 85——89 3.7 82——84 3.3 78——81 3.0 75——77 2.7 72——74 2.3 68——71 2.0 64——67 1.5 60——63 1.0 60以下 0 1.一门课程的学分绩点=该课绩点*该课学分 2.总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)原创 2021-01-25 21:13:14 · 3126 阅读 · 0 评论 -
如何优雅的使用双指针---给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。...原创 2021-01-25 21:06:40 · 265 阅读 · 0 评论 -
你知道二维数组的两个维度分别代表什么吗
用了很久的二维数组,今天突然发现好像除了一点问题,他和我理解的不是特别一样。所以来写这一篇文章,重点介绍一下二维数组的维度;首先来看看一段代码:public class MyLength { public static void main(String[] args) { int[][] arr=new int[2][4]; System.out.println(arr.length); System.out.println(arr[0].leng原创 2021-01-16 12:09:23 · 1756 阅读 · 1 评论 -
判断一个数是不是2的k次方
判断一个数字是不是2的k次方(这里不用考虑k的值)。关于这个问题,要先从问题的本质入手:2的k次方的数字有哪些特点?首先熟悉几个常见的(括号内是相应的二进制序列):2(10) 4(100) 8(1000) 16(10000)我们发现这些2的多少次方的数字呢,二进制序列都是只有唯一一个1的。那么就从这里入手。介绍以下两个方法:方法一思路:将该数的二进制序列右移i位,直到遇到第一个1,然后判断这个数字是不是为1,如果为1的话,表示这个数的二进制序列只有一个1,即是2的次数。原创 2021-01-10 21:14:39 · 775 阅读 · 0 评论 -
详解快速排序--java版
在所有的排序算法中,快速排序当然是非常重要的,毕竟速度如其名—快速。在最开始接触快速排序的时候很难理解他的思想,经过我认真琢磨终于知道是怎么回事了,下面就介绍一下关于快速排序的一些基本内容。这里写目录标题快速排序的思想确定key的下标的方法快排的相关性质和特点快速排序的思想要了解一个算法,那么算法的思想首先要知道。假定给定了一个整型的数组,要将数组升序排列。现在使用快速排序的思想来解决这个问题:分为以下几个步骤:1.从数组里面取出一个key值。2.大于key的值就放在key的后面。3.小原创 2020-10-31 11:39:12 · 280 阅读 · 1 评论 -
栈和队列的知识总结---数据结构
一、栈和队列是什么栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。二、栈和队列的特点1.栈的特点:先进后出,后进先出。(FILO)2.队列的特点:先进先出;以什么样的方式进来,就以什么样的方式出去。(FIFO)3.队列的分类:队列可以分为单向队列(Queue)和双端队列(Deque)三、常用的方法以及使用Queue常用的方法有:1.add(E e)–将制定元素e原创 2020-09-27 13:18:48 · 1862 阅读 · 0 评论 -
java的异常原来是这么回事
曾经我觉得异常很高深,不断了解之后,有了更深刻的理解。一、异常的含义首先来说说什么是异常:所谓异常就是在程序运行时发生了错误来告诉运行者的一种机制这与我们平时在敲代码时候遇到的将Println拼写错误时候报错不同,后者是在编译时期出错,前者是在运行时发生异常了。运行时异常是已经编译通过生成了.class文件,在由JVM执行的时候发生了错误。二、异常的解决办法一般有两种解决办法:1.在操作自谦就做充分的检查。2.先操作,遇到问题再处理。三、异常的基本使用方法try{有可能出现异常的语句原创 2020-08-07 22:11:06 · 216 阅读 · 0 评论 -
斐波那契数列的不同实现方法
我们很常见的菲波那切数列是在编程中经常可以遇见的。所以我在这里写下两种常用的求菲波那切数列的方法:方法一:递归实现求菲波那切数列代码实现如下:public static void fabi(int n){ if(n==1||n==2){ return 1; } else{ return fabi(n-1)+fabi(n-2); //System.out.println(num); } }方法二:第二种方法呢,就是迭代实现,这种方法更加容易理解一些。代码实原创 2020-07-21 19:33:33 · 318 阅读 · 0 评论 -
java的运算符
java中的运算符有以下几类:1.四则运算符(±*/%)这几种运算符都比较简单,要重点注意的是以下几点。(1)int 类型/int 类型,可能等于整数,也可能小数。java中因为对安全问题的考虑,int/int的值就默认将计算结果判断为int类型。例如: int a=3; int b=2; double x=a/b; System.out.println(x);他的运行结果是:即int/int之后的结果是按照int来截取的。(2)除数不能够为0,(3)%表示取原创 2020-07-17 16:40:03 · 206 阅读 · 0 评论 -
java的数据类型(与C语言的异同点)
学完C语言之后,当我们认真去学习java的时候,就会发现java会有很多和C语言类似的地方。先从java的数据类型来看分析。java有以下几种基本的数据类型:1.整型变量整型变量又有长整型(long)、整型(int)和短整型(short)之分。定义形式:int 变量名=10;long 变量名=1000L;short 变量名=100;需要注意的是:(1).在C语言中,int的大小是取决于环境的,假如是32位的计算机,那么int类型的变量,占4个字节;16位的计算机中,int占2个字节;原创 2020-07-16 20:08:48 · 3704 阅读 · 1 评论