
java
文章平均质量分 52
麦田里的守望者_zhg
如果有人碰到别人在穿越麦田,我一定会抓住他...
展开
-
Java中的抽象类和接口的区别
什么是抽象类,抽象类和接口的区别?原创 2022-10-01 15:46:54 · 615 阅读 · 0 评论 -
Java中如何将List<Integer>转成List<Long>?
java-List与List相互转换转载 2022-07-28 21:01:03 · 2163 阅读 · 0 评论 -
java中的default关键字详解
default关键字和Java中的public、private等关键字一样,都属于修饰符关键字,可以用来修饰属性、方法以及类,但是default一般用来修饰接口中的方法。出现该关键字的原因是,由于接口在Java中定义之初,有一个缺点,那就是,如果定义了一个接口,接口中又定义了N个方法,那么某个具体的类在实现该接口时,需要实现接口中的所有方法,不管是否需要用到接口中的方法。如果接口中的某个方法被default关键字修饰了,那么具体的实现类中可以不用实现方法。Student类可以不用实现Person接口中的s原创 2022-07-09 23:09:56 · 28438 阅读 · 0 评论 -
java中Long类型的一个小bug
Java中long型赋值的一个小bug原创 2022-06-15 16:11:09 · 296 阅读 · 0 评论 -
Diffience between Stack and Heap Memery in java ?
referenceSr. No.KeyStackHeap Memory1BasicStack memory is used to store items which have a very short life like local variables, a reference variable of objectsHeap memory is allocated to store objects and JRE classes.2OrderingThe stack转载 2020-12-03 17:00:52 · 252 阅读 · 0 评论 -
java面试之【java内存模型JMM】
1.java内存模型reference pagejava虚拟机的内存空间总共分成5个部分:本地方法栈(Native Method Stacks)程序计数器(Program Counter Register)虚拟机栈(JVM Stacks)堆区(Heap)方法区(Method Area)1.1 Program Counter Register(1)定义程序计数器是一块较小的内存空间,可以把它看作当前线程正在执行的字节码的信号指示器。程序计数器里面记录的是当前线程正在执行的那一条字节码转载 2020-11-25 20:20:33 · 457 阅读 · 0 评论 -
java面试之java中的 sleep()、wait()和yield()的区别
1 区别在java中,sleep()和yield()方法是Thread类中的方法,而wait()是Object类中的方法。也就是说,在java中,所有的类都有wait()方法,而只有继承了Thread类的方法才有sleep()和yield()方法。2 其中sleep()和wait()的区别sleep()方法用于短暂暂停线程的运行,而wait()方法用于线程间的通信更主要的区别是:线程调用sleep()方法后,当前线程不会释放其持有的资源线程调用wait()方法后,当前线程会释放其持有的原创 2020-11-25 16:18:42 · 1186 阅读 · 2 评论 -
LeetCode刷题之 【剑指 Offer 54. 二叉搜索树的第 k 大节点】
1 题目给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 4示例2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \原创 2020-11-24 16:24:50 · 224 阅读 · 0 评论 -
LeetCode刷题之 【剑指 Offer 28. 对称的二叉树】
1 题目请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3原创 2020-11-24 15:53:24 · 235 阅读 · 0 评论 -
LeetCode刷题之 【剑指 Offer 19. 正则表达式匹配】
1 题目请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = “a*”输出: true解释: 因为 ‘原创 2020-11-23 19:27:49 · 250 阅读 · 0 评论 -
LeetCode刷题之 【下一个排列】
1 题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/next-permutation著作权归领扣网络所有。商原创 2020-11-10 21:19:59 · 200 阅读 · 0 评论 -
java中Arrays的排序介绍
1 一维数组有一下几种排序方式:默认顺序排序int [] a = {4,5,3,1,7};Arrays.sort(a);倒序排序使用Collections.reverseOrder()对其进行倒序排序,但是必须将数据的类型改成`Integer类型,否则不能进行。Integer [] a = {4,5,3,1,7}; Arrays.sort(a, Collections.reverseOrder());实现Comparator接口中的Compare()方法单独实现该接口:clas原创 2020-11-04 16:28:15 · 1635 阅读 · 0 评论 -
LeetCode、牛客刷题之int类型越界导致答案错误
1 注意题目:[编程题]逆序对距离之和当在刷题或者做题时,发现代码都是对的,但是就是不能100%通过,如下:经过两个小时的排错,终于发现了问题在哪里,直接看代码:这是有问题的代码:import java.util.Scanner;public class Main{ private static int sum = 0; public static void main(String []argv){ Scanner sc = new Scanner(Syste原创 2020-11-01 22:03:58 · 717 阅读 · 0 评论 -
java中==和equals的区别?
在java语言中,equals用来比较两个对象的值是否相等,==用来比较两个对象在内存中地址是否相等。由于equals是object类拥有的方法,所有java中所有类有具有该方法,可自行重写。String s1 = "string";String s2 = "string";String s3 = new String("string");String s4 = new String("string");System.out.println(s1==s2);//trueSystem.out.pr原创 2020-10-27 22:03:24 · 357 阅读 · 0 评论 -
Leetcode刷题之 【215. 数组中的第K个最大元素】
1 题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element原创 2020-10-22 18:47:57 · 435 阅读 · 0 评论 -
Leetcode刷题之 【N皇后问题】
1 题目n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入:4输出:[[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]解释: 4 皇后问题存原创 2020-10-19 21:46:02 · 908 阅读 · 0 评论 -
牛客网刷题闭坑 【表的主键特点中,说法不正确的是?】
1 题目有争议的答案是D和C,C: 一张表只能有一个主键,一个主键可以包含多个字段。D: 主键约束可以定义在表级或列级,主键不能原创 2020-10-18 10:13:09 · 765 阅读 · 0 评论 -
Java中的静态代码块与代码块详解
1 构造代码块构造代码块就是在类中用{}括起来的代码块,如下所示,普通代码块按照顺序从上到下依次执行。public class Test{ { //这是构造代码块 }}2 静态代码块静态代码块就是使用static修饰的用{}括起来的代码段,如下所示,静态代码块用于给静态变量进行赋值,且:静态代码块只在类加载时执行,而且静态代码块只能给静态变量赋值,不能给成员变量赋值。static{ //这里是静态代码块, //静态代码块中的代码会优先于}静态代码块只在类加载时执行pub原创 2020-10-17 17:01:54 · 911 阅读 · 0 评论 -
Java中的输入操作
1 输入操作通常,我们自己编写函数都不是手动从控制台输入数据,然而有时在刷牛客网的题目时,会出现要使用输入操作的情况,如果算法逻辑已经写出来了,由于输入输出的小错误导致真个算法不能通过的话,那么就很尴尬了。1.1 Scanner类Scanner类隶属于java.util.Scanner,所以使用时需要带入该包。具体用法:定义Scanner类:Scanner input = new Scanner(System.in);输入整数:int n = input.nextInt();//输入整数输入原创 2020-10-17 15:46:01 · 1588 阅读 · 0 评论 -
Java中System.arraycopy的用法
1 用法介绍System.arraycopy在Java中是用来深拷贝数组的,由于数组是一种引用的数据类型,所以在Java中的赋值操作都是一种引用,即使用指针指向内存中的数组,其实内存就只有一份数组。* @param src the source array.* @param srcPos starting position in the source array.* @param dest the destination array.* @par原创 2020-10-15 16:13:50 · 1000 阅读 · 0 评论 -
面试题之 【单例模式的几种实现】
1 双重加锁单利模式是设计模式中最基础的设计模式之一,且也是唯一能够使用几十行代码就能够写出来的一种设计模式,所以也是面试中经常问到的题目。单利模式的实现比较简单,如果想要达到高效且线程安全那也是需要点技巧的。public class Person { private Person(){} private static volatile Person person; public static Person getInstance(){ if (per原创 2020-10-14 16:24:03 · 257 阅读 · 0 评论 -
Leetcode刷题之 【寻找重复数】
1 题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。来源:力扣(LeetCode)链接:原创 2020-10-12 20:11:31 · 373 阅读 · 0 评论 -
面试题之 【01背包问题】
1 题目一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]。那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。2 解题思路本题目的解题思路类似金矿问题,放到背包里面的物体要么整个放进去,要么就不放。那么根据动态规划的思路就有下一下两种情况:放进背包:此时将物体i放进背包,那么所剩物体减少1个,背包所能继续装物体的重量为V-weight[i],背包总价值加上物体i的价值。不放:此时不放到背包中,所剩物体减少1个,背包所能继续装物体原创 2020-10-12 17:04:43 · 624 阅读 · 0 评论 -
面试题之 【挖金矿问题】
1 题目有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?2 思路此问题是一道经典的动态规划(Dynamic programming)问题,简称DP问题,动态规划问题求解的三要素有一下三点:全局最优解最优子结构问题的边界对该金矿问题(假设共有n个金矿,共有w个工人,金矿的含金量数组为g,每个金矿所需开采工人的数组为原创 2020-10-10 12:00:57 · 1702 阅读 · 0 评论 -
面试题之 【删除k个数字后的最小值】
1 题目给出一个整数,从该整数中删除k个数,要求在删去k个数之后,新的整数要尽可能的小,编写一个这样的函数,传入一个正整数和待删除的个数k(k的大小小于等于正整数的长度)。举例:input: n = 3459, k =1output: 359input: n= 1593212, k = 3output: 1212input: n=12345, k= 2output: 123input: n = 41270936, k = 2output: 1209362 思路一下子删去k个数,想原创 2020-10-09 15:54:03 · 1163 阅读 · 0 评论 -
面试题之 【寻找全排列的下一个数】
1 题目给出一个正整数,找出这个正整数所有数字全排列的下一个数。比如:12345->1235412543->1254312354->1243512435->124532 思路可分成三种情况进行分析,当数字组合已经是逆序排列时,比如:54321,已经是所有数字组合中的最大值,直接返回原数。当数字组合的倒数两位是顺序排列时,比如:12345、13245、14523,直接将最后两位交换位置即可。即12345->12354、13245->13254原创 2020-10-09 14:17:32 · 644 阅读 · 0 评论 -
桶排序应用之 【计算无序数组有序之后的最大相邻元素差】
1 题目编写一个函数,传入一格无序的数组,返回无序数组排序之后的最大相邻元素的差。举例:输入:[5, 7, 2, 9, 10, 20, 44, 39]输出:192 思路1(暴力破解)先使用一种时间复杂度为O(logn)的排序算法将无序数组排好序然后在依次求相邻元素的差,并保存最大的差值。这种方法肯定能解决该问题,但是这样做的算法时间复杂度太高,接近O(n*n)。public int bruteForce(int []nums){ int distance = 0;原创 2020-10-07 20:32:27 · 335 阅读 · 0 评论 -
Leetcode刷题之 【剑指 Offer 59 - II. 队列的最大值】
1 题目请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,原创 2020-10-07 17:31:02 · 246 阅读 · 0 评论 -
LeetCode刷题之 【面试题 02.08. 环路检测】
1 题目给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环原创 2020-10-06 21:13:18 · 248 阅读 · 0 评论 -
面试题之 【链表是否有环】
1 判断一个链表中是否有环以上面这个链表为例,链表中出现了环路,但是如何检测出该链表是否含有环路呢?1.1 思路使用两个指针,一个快指针和一个慢指针,使用快指针追赶慢指针,当两个指针相遇,那么证明该链表中存在环路。1.2 Java代码 /** * 追赶理论:当两个人在一个环形跑道上跑步时,只要其中一个人的速度比另一个人的速度快, * 那么只要给足够多的时间。该速度快的人一定能追上那个速度慢的人。 * 思路: * 使用两个指针,一个慢指针,一次移动一格,原创 2020-10-06 21:11:09 · 288 阅读 · 0 评论 -
数据结构之桶排序
1 桶排序桶排序是计数排序的一个扩展,计数排序相当于每个桶只能存放相同的元素,而桶排序则是可以存放一定区间内的元素,将所有元素放到桶中以后,然后对每个非空桶中的元素进行排序,最后打印输出即可。1.1 确定桶的个数确定的个数的方式有很多,比如:可以直接使用和原始数组长度相同的桶的个数,然后每次计算每个元素应该放在哪个桶中桶的长度:array.sizemax和min表示数组中的最大值和最小值确定每个元素应该放在哪个桶中,使用公式:(max-min)*(array.size-1)/(max-m原创 2020-10-06 16:25:20 · 1392 阅读 · 0 评论 -
数据结构之计数排序
1 计数排序计数排序是一种比较快速的排序方法,相对于冒泡排序、快速排序、堆排序、鸡尾酒排序等,计数排序是一种不需要进行元素之间对比的排序算法,但是该算法也有一定的局限性。算法思路:需要使用一个计数数组,将待排序数组中的每个元素遍历一遍,将每个元素出现的个数放到计数数组中,元素的值是多少就在计数数组相应的下标元素上的计数加1。举例:待排序数组:[2,4,3,2,2,2,5,5,6,2,9,8,8,9]通过计算,可以知道当前数组的最大值是9,所以创建一个大小为9+1的数组,然后遍历该数组,并记录每个原创 2020-10-06 11:13:57 · 1177 阅读 · 0 评论 -
数据结构之快速排序
1 快速排序快速排序是一种由分治思想而设计的一种排序算法,其时间复杂度最好为O(nlogn),最差为O(n*n),所以该方法是一种不稳定的排序算法。2 双指针法双指针法是使用两个指针来定位基准值前后两部分的元素,left和right指针。需要注意:先对right指针进行比较,然后才对left指针进行比较2.1 Java代码实现升序排序public class QuickSort { private int[] array; public QuickSort(int[] a原创 2020-10-05 21:22:23 · 901 阅读 · 0 评论 -
数据结构之堆排序(升序和降序)
关于堆这种数据结构,可以观看这篇文章【数据结构之堆】,要是不了解的话。1 升序排序升序排序使用最大堆,降序排序排序使用最小堆,并不是说只能这样用,只是这种设计会比较简洁。这里以升序排序为例,每次需要将当前堆调整为最大堆,然后将堆顶元素(数组第0个元素)和最后一个元素(第size-1个元素)进行交换。然后对前面的(n-1)个元素调整成最大堆,但是需要注意:此时,堆相当于删除了对顶元素,然后最后一个元素换到堆顶的位置,此时需要重新调整,但是堆的大小也减小了1。所以,此时调整的应该是n-1个元素的堆。p原创 2020-10-05 18:55:32 · 5381 阅读 · 0 评论 -
数据结构之堆
1 堆堆是一种特殊的二叉树数据结构,它是一颗完全二叉树,即直到最后一个叶子节点,中间没有空缺节点。由于堆是完全二叉树,那么就可以使用线性数据结构数组来进行表示:当直到根节点的索引时,可以计算出左右子树的节点索引:parentIndex = i;leftChildIndex = 2 * i +1;rightChildIndex = 2 *i +2;当直到子节点的索引时,可以直到父节点的索引:if leftChildIndex = i parentIndex = (leftChildInde原创 2020-10-05 18:42:34 · 198 阅读 · 0 评论 -
位运算便利店
1 判断奇数和偶数如果不用位运算的话,那么大部分的判断奇数偶数的方式应该是下面这种:if (a % 2 == 0) //是偶数else //是奇数如果使用位运算的话,可以提高效率:if ((a & 1) == 0) //是偶数else //是奇数因为奇数的二进制表示的最后一位肯定是1,偶数的二进制表示的最后一位肯定是0,所以可以采用这种方式进行判断。2 除2做除法也可以使用位运算,普通的除法虽然效率很高,但是并没有二进制的除法效率高,因为二进制是计算机最底层的表示。但原创 2020-10-05 10:56:16 · 152 阅读 · 1 评论 -
数据结构之鸡尾酒排序
1 鸡尾酒排序当冒泡排序的基础上,鸡尾酒排序进一步对其进行了优化,由于冒泡排序会对一些已经排好序的数列进行比较,浪费了很多比较次数,所以鸡尾酒排序:当第一轮从左到右排序确定了一个最大(最小)值之后,然后就从右向左进行比较往回走,在从右向左比较完之后,数列中的最小(最大)值被浮到最前面的位置。2 代码实现import java.util.Arrays;public class CockTailSort { public void cockTailSort(int[] arrayLike) {原创 2020-10-04 20:44:13 · 282 阅读 · 0 评论 -
数据结构之冒泡排序及其优化
1 冒泡排序顾名思义,冒泡就是像水中的泡泡一样,一步一步将需要排序的数列中的最大值或者最小值浮到最上面来。2 代码实现public void bubbleSort(int[] arrayLike) { int n = arrayLike.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arrayLike[j] &g原创 2020-10-04 19:47:14 · 219 阅读 · 0 评论 -
Leetcode刷题之 【最近的请求次数】
1 题目写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证每次对 ping 的调用都使用比之前更大的 t 值。示例 1:输入: [“RecentCoun原创 2020-10-03 21:58:57 · 362 阅读 · 0 评论 -
数据结构之单调队列的实现
1 什么是单调队列顾名思义,单调队列原则上也是一种队列,只不过在队列的基础上,有一些额外的功能是基本的队列所没有的。比如说每次出队的元素都比上一次的元素大或者小,这就是一种单调队列。2 Java代码实现import java.util.LinkedList;import java.util.Queue;/** * 单调队列 */public class MonoQueue { private boolean up = true; private Queue<Integ原创 2020-10-03 19:46:30 · 679 阅读 · 0 评论