javase总结
JZ20
这个作者很懒,什么都没留下…
展开
-
剑指offer算法题之数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路若满足,则一定先满足他是一个众数,先找出众数,再判断是不是超过了一半public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if(array.length == 0){原创 2020-08-21 09:26:24 · 190 阅读 · 0 评论 -
剑指offer算法题之变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public class Solution { public int JumpFloorII(int target) { if(target == 0 ||target == 1){ return 1; }else{ double a = target; double b =Math.p原创 2020-08-21 09:24:30 · 208 阅读 · 0 评论 -
剑指offer算法题总结之不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:把按位运算计算加法的操作分成两步(其实和列竖式计算的思路一致,就是拆分成两步而已):1 每一位的计算结果在不考虑进位的情况下 异或 ,记作数a,2 把进位给加上,也就是按位与,然后左移一位 (和列竖式时进一位写个小1道理一样)记作数b ;3 把1,2的结果相加 ,但是1,2相加操作本身又需要使用1,2 直到不需要再进位也就是 2的结果是0即可(相当于列竖式时上下相加没有进位了,这时实际的相加结果和步骤1也就是按位异或结果原创 2020-08-21 09:20:14 · 195 阅读 · 1 评论 -
剑指offer算法题之两个和为s的最小数
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路:前后逼近的双指针用while if,用for没法分情况(大了就头指针往后移动,小了就尾指针往前移)import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {原创 2020-08-21 09:17:49 · 145 阅读 · 0 评论 -
剑指offer算法题总结之二进制数中1的个数
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。总结 : 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个原创 2020-08-19 18:50:48 · 130 阅读 · 0 评论 -
剑指offer算法题总结之调整数组顺序使得奇数在偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。*思路 :这个其实考察的还是排序算法,例如利用冒泡排序的思想,排大小和排奇偶也没什么区别public class Solution { /** * 冒泡 * @param array */ public static void reOrderArray(int [] array) {原创 2020-08-19 18:48:40 · 132 阅读 · 0 评论 -
剑指offer算法题总结之最小的k个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这个题我用的比较直接的方法,用hashmap,但是这题目用堆排序更契合,后续待补充import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { Arrays.sort(input原创 2020-08-19 18:46:41 · 198 阅读 · 0 评论 -
剑指offer算法题总结之反转单词序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:先反转整个句子,再一个个反转单词,靠空格判断单词起始位置public class Solution { public String原创 2020-08-19 18:45:00 · 164 阅读 · 0 评论 -
剑指offer算法题目总结之机器人走格子
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?//思路:dfs,搜索四个方向,vis记录该方格是否被搜索过,// 预判方格是否合法,合法就从该方格接着搜索public class Solution {原创 2020-08-19 18:42:45 · 573 阅读 · 0 评论 -
剑指offer算法题总结 丑数
之前老早就准备贴过来的,一直没做,现在把剑指offer上遇到的写的不好的收藏的题拿过来整理总结一下把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。想法:丑数也可以理解为一种迭代,并且按从小的到大排列的话,就是不断地从已经得到的已知的丑数里再继续乘以2,3,5得到新的,但是根据直觉很容易知道除了第一个1之外(也就是目前只有一个丑数),肯定先乘以2,然后就需要判断了因为产生的原创 2020-08-19 18:40:19 · 146 阅读 · 0 评论 -
java动态代理的invoke以及源码理解
invoke 方法介绍想要知道 invoke方法为什么会自动调用我们先要来了解一下这个方法public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args)首先 该方法来自于接口InvocationHandler ,该接口中仅有一个invoke方法 ,该方法中有三个参数12345@param proxy the proxy instance that转载 2020-07-29 17:44:47 · 671 阅读 · 0 评论 -
java动态代理原理详解
记录一下看到的一篇写的很好的博客:在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是Java的动态代理机制,所以本篇随笔就是对Java的动态机制进行一个回顾。首先问一个问题,为什么需要动态代理?代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处转载 2020-07-29 17:27:54 · 185 阅读 · 0 评论 -
java动态代理中invocationhandler和Proxy.newProxyInstance的原理理解
最近看动态代理和aop,对一些问题有一些疑惑和自己的理解,希望大佬能看看我说的哪里有问题,给我指正,欢迎讨论 //调用该方法Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),myInvocationHandler);} //返回一个代理类的对象,实现第一步,而我们自己写的InvocationHandler的接口实现类,看似和静态代理的代理类比较像, //但在动态原创 2020-07-29 17:23:08 · 905 阅读 · 0 评论 -
java笔记随时整理
数组长度为0和null不同, int 【】arr = new int【0】和 int 【】arr = null的区别是一个堆空间确实new了对象有地址,null是空引用string不可变,底层是char数组,所以string虽然是引用类型数据,但是复制赋值时,string a = “a”;string b = a;b = “change”;此时虽然ab同时指向原来a那一份的堆空间,但是修改了之后,因为不可改所以就重新开辟空间又存放这些数据,string的两种创建方式:直接赋值,从常量池中找,有了直接拿原创 2020-07-26 22:12:53 · 107 阅读 · 0 评论 -
Java反射等相关知识回顾总结
框架= 反射 + 注解 + 设计模式反射可以用来:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时获取泛型信息在运行时调用任意一个对象的成员变量和方法在运行时处理注解生成动态代理Class类对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个结构(class/interface/en原创 2020-07-22 10:07:00 · 116 阅读 · 0 评论 -
java的向下转换即引用数据类型的强制类型转换与多态的
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论引用数据类型的强制类型转换。 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上原创 2020-07-21 10:23:33 · 245 阅读 · 0 评论 -
java有关线程创建方式,线程池,sync,lock锁等的内容再次补充以及sleep,wait
线程四种创建方式:(Thread类也是继承了runnable接口的)1 继承thread类 共享数据 成员变量得是static的,比如卖票2 实现runnable接口 ,然后把实现类的一个实例化对象放到thread类的构造器中充当task参数,通过thread.start()启动线程并执行run方法,thread类源码的run()方法是先判断task是否是null,若不是null,在执行run方法时,执行的是task.run() ,也就是自己实现接口的那个实现类的run有利于多个线程共享数据().原创 2020-07-20 17:18:24 · 166 阅读 · 0 评论 -
java的stringbuffer和stringbuilder区别
1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低...原创 2020-07-20 17:19:07 · 105 阅读 · 0 评论 -
简洁易懂举例理解jdk5.0之后java的自动装箱和自动拆箱
之前就遇到过类似的疑惑,为什么基本数据类型有时候能当成对象用,例如一个method(object o);需要一个对象作为参数传入,但是int i= 1;这样的一个i可以传入,或者说这个时候的i可以当成一个对象用,这就是jdk5之后就有的新特性,自动装箱,意思就是本身是个基本数据类型,但是在他需要时可以直接封装成一个包装类的对象,在需要他变成基本数据类型时,他就自动拆箱变成里面的那个数据;它们分别对应着在jdk5之前没有自动装箱和拆箱的两个步骤:装箱int i = 1对应: 实例化一个对象:integer原创 2020-07-20 11:19:48 · 153 阅读 · 0 评论 -
Java集合知识点回顾总结
一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。同时无法直接获取存储元素的个数数组存储的原创 2020-07-19 11:15:51 · 217 阅读 · 0 评论 -
java四个权限修饰符的区别
原创 2020-06-25 16:17:53 · 183 阅读 · 0 评论 -
java的次方表示式以及if else 和 switch case区别
java表示一个数的次幂必须得用这个方法才行,Math.pow(底,次方)if else 和switch case:switch case 都可以 转换成if else ,反之则不定;因为switch case都是对离散值的筛选,比如case:1,2,3…时;但是if else 可以是一个范围比如if(a<10)时,所以当if else 是一个范围的话,就不能用switch case代替了...原创 2020-06-07 10:05:12 · 589 阅读 · 0 评论 -
java的junit测试类的@test在测试时一直运行转圈圈以及为什么声明成public
Junit是自动化的测试,手动的输出会导致一直阻塞,也就是说junit不支持手动输入,否则会导致当前线程一直阻塞,转圈圈,所以test类不要用scanner那种控制台手动输入数据的方式,把数据直接写成形参,测试的时候直接写成参数测试吧;JUnit总是为每个@Test方法创建一个测试类实例,所以必须要声明成public,也就是公共的,才能让junit给你创建,否则权限不够的....原创 2020-06-06 10:56:32 · 4542 阅读 · 0 评论 -
java数据类型中,为什么float类型数据要加f,long类型要加l的原因
今天温习的时候发现,之前理解的不太对,现在记录一下:首先float的f是必须要加的,不加就编译出错;long的l不是必须要加的,加l是为了保险起见;这两者的原因其实是不同的:首先这块会编译错误的主要两个报错原因为:原因一:required :floatfound:double原因二:integer number too large1.float类型末尾加f是因为:例如 float f = 4.0f ,4.0是浮点数,默认是double类型,如果不加f去标记的话,那这个浮点数就是从doub原创 2020-06-05 17:42:26 · 6949 阅读 · 1 评论 -
javase个人学习总结(十二)io流
io流的内容其实也很多,但大部分都是实际应用中年遇到的问题,所以也是挖坑,等日后遇到相关问题再总结到这里吧Io流1.可分为节点流和处理流,处理流作用于节点流(1,2)上,处理流关闭,节点流关闭,例如装饰设计模式,还可分为字节流(非文本文件),字符流(文本文件)2.使用byte【】,char【】数组储存,读入时可能出现,文件不存在的异常,写出时,若指定文件没有,就会直接创建一个Io流1.可...原创 2020-02-29 19:11:35 · 108 阅读 · 0 评论 -
javase个人学习总结(一)内部类
因为前面面向对象之前的东西大多是语法问题,没有总结太多,准备放到过两天统一整理一下,这些都是之前先总结好的写在doc里,主要是面向对象和javase高级部分内部类:类的第五个成员1.定义:如果一个java类中有一部分有明显的特征功能完整,可以将其写成一个内部类比如person和leg的关系,便可以将一个类b声明在类a里,成为a的内部类2.内部类的分类:(和变量类似)成员内部类(外部类名内...原创 2020-02-29 18:36:03 · 151 阅读 · 0 评论