
java
lzy520o
这个作者很懒,什么都没留下…
展开
-
Java类加载器
Java类加载器(Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。知道类加载的过程吗?类加载过程:加载->连接->初始化。连接过程又可分三步:验证->准备->解析。那么加载时这一步又做了什么?类加载过程的第一步,主要完成下面3件事情:1、通过全类名获取此类的二进制字节流2、将字节流所代表的的静态存储结构转换为方法区的运行时数据结构3、在内存中生成一个原创 2020-07-18 18:33:58 · 239 阅读 · 0 评论 -
java中的关键字transient
一、初识transient关键字其实这个关键字的作用很好理解,就是简单的一句话:将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。概念也很好理解,下面使用代码去验证一下:public class User implements Serializable { private static final long serialVersionUID = 123456L; private transient int age; private原创 2020-06-07 00:13:02 · 237 阅读 · 0 评论 -
二分查找
/**二分查找时间复杂度:O(n)*/public class BinarySearch { public static void main(String[] args) { int [] arr = {1,3,5,7,9}; int a = binary_search(arr,10); System.out.println("该元素的下标为:"+a); } public static int binary_search(int[原创 2020-06-06 11:10:35 · 98 阅读 · 0 评论 -
最低票价
题目:最低票价题目描述:在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅行。 例如,如果我们在第 2 天获得一张为期 7 天的通行证,那么我们可以连着旅行 7 天:第 2原创 2020-06-06 11:08:01 · 111 阅读 · 0 评论 -
线程池练习题1
有一个最大并发量为10的线程池;往该线程池中同时提交100个计算任务,计算任务分为四种类型分别为两数之和、两数之差、两数乘积及两数除法,每种类型分别有25个任务。请编写一个程序实现上述逻辑,并描述实现思路。public class Demo { private static double z; public static void main(String[] args) { ExecutorService service = Executors.newFixedThread原创 2020-06-06 11:06:49 · 824 阅读 · 0 评论 -
统计位数为偶数的数字
统计位数为偶数的数字给你一个整数数组 nums,请你返回其中位数为偶数的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:2解释:12 是 2 位数字(位数为偶数)345 是 3 位数字(位数为奇数)2 是 1 位数字(位数为奇数)6 是 1 位数字 位数为奇数)7896 是 4 位数字(位数为偶数)因此只有 12 和 7896 是位数为偶数的数字示例 2:输入:nums = [555,901,482,1771]输出:1解释:只有 1771 是原创 2020-06-06 11:03:46 · 602 阅读 · 0 评论 -
给定一个链表,判断链表中是否有环
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos = -1输出原创 2020-06-06 11:01:20 · 583 阅读 · 0 评论 -
主要元素
主要元素如果数组中超过一半的数都是同一个,则称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2:输入:[3,2]输出:-1public class MajorityElement { public static void main(String[] args) { int[] nums = {1, 2}; System.out.println(majorityEl原创 2020-06-06 10:56:16 · 175 阅读 · 0 评论 -
盛最多水的容器
题目:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。public class MaxArea { public static void main(String[] args) { int[] height = {7,4,原创 2020-06-06 10:54:17 · 152 阅读 · 0 评论 -
二叉树的最大深度
题目:二叉树的最大深度题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \9 20/ 15 7返回它的最大深度 3 。public class MaxDepthBinaryTree {static class TreeNode{int val;TreeNode left;TreeNode right;p原创 2020-06-06 09:51:35 · 100 阅读 · 0 评论 -
礼物的最大价值
题目:礼物的最大价值题目描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物提示:0 < grid.length <= 2000 < g原创 2020-06-06 09:50:19 · 138 阅读 · 0 评论 -
填充书架
题目:填充书架题目描述:附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上。你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为 books[i][1]。按顺序 将这些书摆放到总宽度为 shelf_width 的书架上。先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelf_width),然后再建一层书架。重复这个过程,直到把所有的书都放在书架上。需要注意的是,在上述过程的每个步骤中,摆放书的顺序与原创 2020-06-06 09:46:57 · 144 阅读 · 0 评论 -
飞机座位分配概率
题目:飞机座位分配概率题目描述:有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。剩下的乘客将会:如果他们自己的座位还空着,就坐到自己的座位上,当他们自己的座位被占用时,随机选择其他座位第 n 位乘客坐在自己的座位上的概率是多少?示例 1:输入:n = 1输出:1.00000解释:第一个人只会坐在自己的位置上。示例 2:输入: n = 2输出: 0.50000解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。pub原创 2020-06-06 09:43:12 · 303 阅读 · 0 评论 -
解码方法
题目:解码方法题目描述:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。public class NumD原创 2020-06-06 09:41:36 · 162 阅读 · 0 评论 -
一次编辑
题目:一次编辑题目描述:字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例 1:输入:first = “pale”second = “ple”输出: True示例 2:输入:first = “pales”second = “pal”输出: Falsepublic class OneEdit {public static void main(String[] args) {S原创 2020-06-06 09:39:13 · 407 阅读 · 0 评论 -
移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。*不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 n原创 2020-06-06 09:37:38 · 138 阅读 · 0 评论 -
存在重复元素
题目名称:存在重复元素题目描述:给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true*public class RepeatData {public static void main(Stri.原创 2020-06-06 09:36:06 · 139 阅读 · 0 评论 -
反转链表
题目:反转链表题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000public class ReverseLinkedList {static class ListNode{int val;ListNode next = null;ListNod原创 2020-06-06 09:33:59 · 162 阅读 · 0 评论 -
翻转字符串里的单词
题目:翻转字符串里的单词题目描述:给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a good example”输出: “example good a”解释: 如果两个单词间有多余的空格,将反转后单词间的空原创 2020-06-06 09:31:36 · 141 阅读 · 0 评论 -
部分排序
/**部分排序给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。示例:输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]输出: [3,9]提示:0 <= len(array) <= 1000000*/public原创 2020-06-06 09:28:56 · 461 阅读 · 0 评论 -
相同的树
题目:相同的树题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 2 [1,2], [1,null,2]输出: false示原创 2020-06-06 09:27:15 · 96 阅读 · 0 评论 -
线程及线程池
*1、创建线程有几种方式?Java中创建线程主要有三种方式:继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程通过Runnable接口创建线程类(1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。(2)创建 Run原创 2020-06-01 18:50:54 · 171 阅读 · 0 评论 -
== 与equals 和 hashCode与equals
== :它的作用是判断两个对象的地址是否相等。判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。equals(): 它的作用也是判断两个对象是否相等。但是它一般有两种情况:1、类没有覆盖equals方法。则通过equals()方法比较两个类的对象时,等价于通过“==”比较两个对象。2、类如果覆盖了equals方法。一般,覆盖equals()方法来比较对象的内容是否相等;若它们的内容相等,则返回true(认为这两个对象相等)。总结:String中的equals方原创 2020-05-30 16:29:01 · 186 阅读 · 0 评论 -
String、StringBuffer 和StringBuilder的区别是什么?String 为什么是不可变的?
String、StringBuffer 和StringBuilder的区别是什么?String 为什么是不可变的?可变性简单来说:String 类中使用final关键字修饰字节数组来保存字符串,private final byte[] value; ,所以String对象是不可变的。而StringBuilder 与StringBuffer 都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字节数组保存字符串 byte[] value,但是没有用f原创 2020-05-30 15:24:47 · 503 阅读 · 0 评论 -
多线程和哈希的一点笔记
一、多线程单核CPU:是没有并发处理的概念,一个核只能同时处理做一件事情。多个事情可以交替执行。临界资源:某一时刻只能属于一个线程使用。并发安全问题:多个线程同时去争抢一个临界资源,引发的问题。单例模式中的线程安全问题:1、没有if判断的,直接在成员变量那里初始化实例,不会产生线程安全问题,但会产生阻塞的情况。2、有if判断,在if判断里new一个实例对象,会产生线程安全问题。3、getSingleton 静态方法加了synchronized 关键字。不会产生线程安全问题。这是 加了一把类锁。原创 2020-05-30 11:23:31 · 445 阅读 · 0 评论 -
多线程的一点笔记
多线程线程与进程进程:是指一个内存中运行的应用程序,每一个进程都有独立的内存空间。线程:是进程的中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程至少有一个线程。一个进程启动后,里面的若干执行路径又可以划分为若干个线程。线程调度:分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。抢占式调度:优先让优先级高的线程使用CPU。如果线程的优先级相同,那么会随机选择一个(线程随机性),java使用的是抢占式调度。CPU使用抢占式调度在多个线程间原创 2020-05-20 22:23:51 · 90 阅读 · 0 评论 -
集合
集合类集设置的目的:为了方便用户操作各个数据结构,所以引入了类集的概念。可以把类集称为java对数据结构的实现。类集中最大的操作接口,Collection、Map、Iterator。所有类集的接口或类都在java.util包中。常用的数据结构:栈、队列、数组、链表和红黑树。栈 (堆栈) :是限定在表尾进行插入和删除的线性表。允许插入和删除的一端为栈顶,另一端为栈底。无任何数据元素的栈为空栈。栈又称先进后出的线性表。特点:1、先进后出。 即先存进取得元素要在后面存进的元素依次取出后,才能原创 2020-05-18 20:18:53 · 214 阅读 · 0 评论 -
ConcurrentModificationException异常
ConcurrentModificationException异常也叫作并发修改异常如下: ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); System.out.println(list); //遍历 //ConcurrentModific原创 2020-05-16 17:57:55 · 370 阅读 · 0 评论 -
链表和二叉树
链表链表 [Linked List]:链表是由一组不必相连(不必相连:可以连续也可以不连续)的内 存结构(节点),按特定的顺序链接在一起的抽象数据类型。链表是离散存储性结构常用链表有3类:单链表、双向链表、循环链表数组是一种连续存储线性结构,元素类型相同,大小相等。链表和数组各自的优缺点:链表优点:空间没有限制 、插入删除元素很快缺点:存取速度慢数组优点:存取速度快缺点:必须事先知道数组的长度、插入删除元素很慢、空间有限制单链表由各个内存结构通过一个Next指针链接在一起组成,每一原创 2020-05-16 07:09:02 · 1410 阅读 · 1 评论 -
常用类库
泛型泛型即参数化类型,将原来具体的类型参数化,在使用时传入具体的类型。作用:1、提高代码复用率2、泛型的类型在使用的时候指定,无需强制类型装换。(类型安全,编译器会检查类型)泛型类: public class Test<T>{ private T data; public T getData(){ return data; } public void setData(T data){ this.data = da原创 2020-05-16 07:07:45 · 184 阅读 · 0 评论 -
异常处理
异常处理1.什么是异常?(重点)异常是在程序中导致中断运行的一种指令流。2.常见的异常及其含义。(熟悉)异常指的是Exception ,Exception类,在Java中存在一个父类Throwable(可能的抛出)。Throwable 存在两个子类:1:Error:表示错误,是JVM发出的错误操作,无法用代码处理。比如:内存过小和内存溢出。Exception : 表示所有程序中的错误,一般在程序中进行try-catch的处理。异常中分非受检异常(如:RuntimeException)与原创 2020-05-09 16:17:28 · 154 阅读 · 0 评论 -
面向对象高级
面向对象高级继承:继承是java面向对象编程技术的一块基石,因为它允许创建分等级的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)据有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。格式:class 父类{}class 子类 extends 父类{}继承的限制:只有单继承、多重继承,没有多继承。super: 通过super...原创 2020-05-03 10:09:44 · 110 阅读 · 0 评论 -
面向对象进阶笔记
面向对象进阶封装private封装的意义在于保护或防止代码(数据)被无意中破坏。保护成员属性,不让类以外的程序直接访问和修改;封装的原则:隐藏对象的属性和实现细节,仅对外公开访问方法,并控制访问级别。在开发中为了避免逻辑错误,建议对所有属性进行封装,为其提供setter和getter方法进行设置和取得操作。this关键字表示当前对象能完成的操作:调用类中的属性调用类中的方法或...原创 2020-05-03 09:57:36 · 228 阅读 · 0 评论 -
面向对象基础
面向对象基础面向对象是相对于面向过程的,指的是相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向过程到面向对象,是思想上从执行者到指挥者的转变。三大思想:OOA:面向对象分析(object Oriented Analysis)OOD:面向对象设计 (object oriented design)OOP:面向对象程序 (object ori...原创 2020-05-03 09:53:53 · 219 阅读 · 0 评论 -
基础语法之数组
数组数组的格式:格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};格式 3. 数据类型[] 数组名; 格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。格式 4. 数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};数...原创 2020-05-03 09:47:58 · 277 阅读 · 0 评论 -
基础语法之流程控制
Java流程控制(上)执行结构概述:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。 分支结构一、if条件语句if条件语句是根据条件判断之后再做处理if(条件语句){…}if (条件语句){…} else{…}if (条件语句){…} else if(条件语句){…}if (条件语句){…} else if(条件语句){…} else{...原创 2020-05-03 09:42:36 · 109 阅读 · 0 评论 -
java基础语法
二进制计算机的数据都以二进制数字保存二进制:逢二进一。即只有0、1两个值计算机中信息的存储单位:位(Bit):表示一个二进制数码 0 或 1,是计算机存储处理信息的最基本的单位。字节(Byte):一个字节由 8 个位组成。它表示作为一个完整处理单位的 8 个二进制数码。变量变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为"变...原创 2020-05-03 09:38:44 · 99 阅读 · 0 评论 -
嵌套循环
用for循环打印100个数public static void main(String[] args) { int count = 0; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { count++; System.out.println(count); } }打印一个10行10列的 “*”...原创 2020-04-25 15:10:29 · 120 阅读 · 0 评论 -
二分法查找
用二分法查找一个数在数组中的下标/*** 二分法查找* @param args* */public static void main(String[] args) { int[] nums = {10,20,30,40,50,60,70,80,90}; //要查找的数据 int num = 50 ; //关键的三个变量: //1. 最小范围...原创 2020-04-25 15:03:10 · 143 阅读 · 0 评论