Java基础
Java基础
FFFXXXFFF
这个作者很懒,什么都没留下…
展开
-
Top问题常见具体场景问法、算法及时间空间复杂度分析
此处不再赘述其他排序方法,最优方法无疑是堆排序。堆排序是通过维护大顶堆或者小顶堆来实现的。堆排序法来解决N个数(非常大)中的TopK的思路是:1、先随机取出N个数中的K个数,将这N个数构造为小顶堆,那么堆顶的数肯定就是这K个数中最小的数了。2、然后再将剩下的N-K个数与堆顶进行比较,如果大于堆顶,那么说明该数有机会成为TopK,就更新堆顶为该数。3、此时由于小顶堆的性质可能被破坏,就还需...原创 2020-03-11 15:08:48 · 1796 阅读 · 0 评论 -
Java深拷贝与浅拷贝区别(面试题)
浅拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。 深拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,**无论该字段是值类型的还是引用类型,都复制独立的一份。**当你修改其中一个对象的任何内容时,都不会影响另一个对象的内容。...原创 2020-03-11 13:19:21 · 1201 阅读 · 0 评论 -
Java创建对象的5种方式
①、通过 new 关键字这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object();②、通过 Class 类的 newInstance() 方法这种默认是调用类的无参构造方法创建对象。比如 Person p2 = (Person) Class.forName(“com.ys.test.Person”).newIns...原创 2020-03-11 13:17:35 · 222 阅读 · 0 评论 -
抽象类与接口区别
1.抽象类 和 接口 都是用来抽象具体对象的, 但是接口的抽象级别最高;2.抽象类可以有具体的方法 和属性,但不一定非要有抽象方法, 接口只能有抽象方法和不可变常量;3.抽象类主要用来抽象类别,接口主要用来抽象功能;4、抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。5.二者都不能直接实例化...原创 2020-03-10 13:48:55 · 456 阅读 · 0 评论 -
进程线程与死锁(死锁产生原因、条件)及解决办法
一、死锁的定义多进程,多线程的并发执行虽然提升了系统资源的利用率,提高了系统的性能,但是并发执行也带来了新的问题-----死锁。死锁是指多个进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象(互相挂起等待),若无外力作用,它们都将无法推进下去——永远相互等待。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。二、几种常见的死锁1.线程...原创 2020-03-08 15:39:54 · 5523 阅读 · 0 评论 -
Java实现-最长上升子序列
本题是一道动态规划问题,如果暴力求解的话,每一个数都有选或者不选两种状态,然后判断是否为上升子序列,如果是,就更新最长长度,直到枚举完所有情况。但是,当有n个元素的时候,其复杂度将达到O(2^n),这显然是不可承受的。所以利用动态规划可以显著的降低复杂度。令dp[i]表示以a[i]结尾的最长上升子序列的长度,对a[i]来说有两种可能:1)如果在i之前存在比a[i]小的数a[j](j <...原创 2020-03-07 20:26:36 · 1049 阅读 · 0 评论 -
Java中List的用法和实例详解
List的用法List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。表1 List接口定义的常用方法及功能...原创 2020-03-06 18:08:31 · 379 阅读 · 1 评论 -
JAVA中StringBuffer类常用方法详解
String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串方面的效率比String高了很多。在java中有3个类来负责字符的操作。1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。不可变类。3.StringBuffe...转载 2020-03-06 15:49:39 · 242 阅读 · 0 评论 -
浅析Java中的Collections.sort排序
Collections类中的sort方法可以对实现了List接口的集合进行排序。这个方法假定列表元素实现了Comparable接口。查看Java官方文档可知,sort方法有两种重载形式。第一种重载是:static <T extends Comparable<? super T>> void sort(List<T> list)这个方法将列表元素进行升序排...原创 2020-03-06 15:34:14 · 348 阅读 · 0 评论 -
数据结构(java语言描述)
数据结构(java语言描述) 概念性描述与《数据结构实例教程》大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html。概述基本概念及术语数据信息的载体,是对客观事物的符号表示,凡能输入到计算机中并被计算机程序处理的符号都可称为数据。数据元素是数据的基本单位,它在计算机处理和程序设计中通常作为独立个体。数据元素一般由一个或多个数...转载 2018-12-26 22:00:06 · 1430 阅读 · 0 评论 -
Java学习笔记1:匿名内部类的相关错误
class Test1_NoNameInnerClass {public static void main(String[] args) {//如何调用PersonDemo中的method方法呢?PersonDemo p=new PersonDemo();//p.method(new Student());p.method(new Person(){//整段代表继承,匿名内部类当做参数传...原创 2018-12-30 12:48:12 · 209 阅读 · 0 评论 -
Java学习笔记2:关于面向过程、面向对象的理解积累
一、概念对比面向对象对象:表达一种具有自己特征与行为的存在组成:属性、方法实现:类,具有同种属性的对象称为类,是个抽象的概念。特点:封装、继承、多态、唯一面向过程分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现二、优缺点比较面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过...原创 2018-12-30 13:13:35 · 141 阅读 · 0 评论 -
Java学习笔记23:Java中charAt()方法的使用
此方法返回位于字符串的指定索引处的字符。该字符串的索引从零开始。charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法.charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.如: str.charAt(0)检索str中的第一个字符符,str.charAt(str.length()-1)检索最后一个字符.package...原创 2019-01-04 14:28:38 · 1839 阅读 · 0 评论 -
Java学习笔记24:java 中 valueof 方法的使用
public static String valueOf(boolean b)返回 boolean 参数的字符串表示形式。public static String valueOf(char c)返回 char 参数的字符串表示形式。public static String valueOf(int i)返回 int 参数的字符串表示形式。public static String valueOf...转载 2019-01-04 14:41:14 · 398 阅读 · 0 评论 -
Java学习笔记25:Java indexOf() 方法
indexOf() 方法有以下四种形式:public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1。public int indexOf(int ch, int fromIndex): 返回从 fromIndex位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。i...转载 2019-01-04 15:29:31 · 225 阅读 · 0 评论 -
Java使用super()、this()父类子类调用的理解
class Fu { //父类public int num=10;public Fu(){System.out.println(“Fu”);}}class Zi extends Fu{ //子类public int num=20;public Zi(){//super();默认调用父类,打印“fu”System.out.println(“zi”);}public void ...原创 2018-12-25 13:49:06 · 619 阅读 · 0 评论 -
Java父类子类加载构造代码块
class Test2_Extends{ //主函数public static void main(String[] args){Zi z=new Zi(); //创建对象}}/*1.jvm调用main方法,main进栈;2.遇到Zi z=new Zi(),先将父类、子类分别加载进内存,再创建对象;3.父类进入内存,静态代码块会加载,子类进入内存,子类静态代码块会加载;4.子类构...原创 2018-12-25 14:03:30 · 159 阅读 · 0 评论 -
Java学习笔记4:JDK/JRE 配置环境变量
1.配置环境变量,环境变量已存在答:在已有变量最前面,添加变量,用;隔开。2.命令提示符编译Java找不到文件答:配置classpath没有指定源程序目录文件命名出错,大小写敏感,使用技术本,扩展命名仍为.txt文件名中有空格3.找不到或无法加载主类答:命令语句不可写错javac 文件名.javajava 文件名...原创 2018-12-30 15:46:12 · 100 阅读 · 0 评论 -
Java学习笔记5:代码标识符编写规范
1.标识符严格区分大小写2.字母、数字、下划线(_)、$组成3.不能以数字开头4.不能是关键字或保留字5.变量、方法,总是使用小写,多个单词第一个单词首字母小写,其余单词首字母大写6.类名每一个单词首字母大写7.常量每一个字母大写,单词之间使用下划线8.变量声明时同时初始化9.每行至多一个语句,一行声明一个变量;10.不同类型变量不要放在同一行;11.方法与方法之间空一行12...原创 2018-12-30 16:00:58 · 221 阅读 · 0 评论 -
Java学习笔记6:break和continue的区别
break跳出循环continue 跳出当前循环,执行下一次循环【多层循环,跳出最外层】。for 跳转到更新语句;while 跳转到布尔表达式return返回到调用者如果方法由返回值类型,必须在方法中使用return返回一个该类型的值。public class ContinueTest { public static void main(String[] args) { fo...原创 2018-12-30 16:12:28 · 134 阅读 · 0 评论 -
Java学习笔记7:&、 &&、 |、 ||、++位置区别
单个符号连接,无论左侧什么情况,两侧表达式都参与计算双符号 如果左侧表达式结果为“false”,则右侧不执行b=a++过程:a——》ba=a+1b=++a过程a=a+1a——》b在具体程序中,注意符号位置不同对中间变量以及多层输出结果的影响...原创 2018-12-30 16:18:17 · 355 阅读 · 0 评论 -
Java学习笔记8:多态性理解
多态是把子类对象主观看作父类型的对象编译时类型指的是被看作的类型运行时类型指的是实际的对象实例的类型,客观不可改变类的具体化就是对象即对象是类的实例化多态特性:对象实例确定则不可改变;只能调用编译时所定义的方法;运行时根据运行时类型去调用相应类型中定义的方法。...原创 2018-12-30 16:32:09 · 188 阅读 · 0 评论 -
Java学习笔记9:修饰符、对象main()理解
修饰符public protected private static final修饰符+类修饰符+变量修饰符+方法修饰符 返回类型 方法名(参数类型 参数名)[throws 异常列表]返回类型可以是基本数据类型也可以是自定义的类接口数组方法没有返回值用void声明一旦声明,必须用return关键字返回该类型数据对象没有显式初始化的成员变量,在为对象分配内存时自动初始化各类型...原创 2018-12-30 16:58:51 · 167 阅读 · 0 评论 -
Java学习笔记26:在大字符串中查找小串
package create;public class Test11 {public static void main(String[] args){ //定义大字符串 String max="haha,lila,wolaila!"; String min="la"; //定义计数器 int count=0; //定义索引 int index=0; while((index=m...原创 2019-01-04 16:01:18 · 671 阅读 · 0 评论 -
Java学习笔记27:类实现接口相关问题
java中,一个类实现某个接口,必须重写接口中的所有方法吗???不一定,关键要看子类是否是抽象类。如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。**通常在编程语句中用 abstr...转载 2019-01-04 19:06:28 · 151 阅读 · 0 评论 -
Java学习笔记28:String,StringBuffer,StringBuilder的区别
String,StringBuffer,StringBuilder的区别是什么?String为什么是不可变的? String是字符串常量,StringBuffer和StringBuilder是字符串变量。 StringBuffer是线程安全的,StringBuilder是非线程安全的。 具体来说String是一个不可变的对象,每次修改String对象实际上是创新新对象,并将引用指向新对象。...原创 2019-01-04 19:16:06 · 130 阅读 · 0 评论 -
Java学习笔记29:Java基础类库简介及lang包介绍汇总
Java基础类库简介及lang包介绍https://blog.csdn.net/gaoshoum/article/details/50194181java.lang包介绍https://blog.csdn.net/u012834750/article/details/79361552【JDK源码】java.lang包常用类详解https://blog.csdn.net/lmb55/art...原创 2019-01-04 20:22:31 · 221 阅读 · 1 评论 -
Java学习笔记30:二分查找算法代码
package create; public class Demo1_Array { public static void main(String[] args){ int[] arr = {11,22,33,44,55,66,77}; System.out.println(getIndex(arr,22)); System.out.println(getIndex(arr,77)...原创 2019-01-05 14:00:11 · 94 阅读 · 0 评论 -
Java学习笔记31:捕获异常try-catch语句
//异常处理通常用try-catch-finally语句实现 package Demo_exception; import java.util.Scanner; public class Test1_Exception { public static void main(String[] args) { Scanner input =new Scanner(...原创 2019-01-05 15:16:34 · 457 阅读 · 0 评论 -
Java学习笔记32:finally语句
package Demo_exception;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException; public class FinallyTest { public static void main(String[] args) { File...原创 2019-01-05 15:42:31 · 118 阅读 · 0 评论 -
Java学习笔记33:数组下标越界
数组下标越界 :在引用数组元素时,使用的下标超过了该数组下标的应有范围。但应注意的是:C/C++不对数组做边界检查。 可以重写数组的每一端,并写入一些其他变量的数组或者甚至是写入程序的代码。不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C / C+...原创 2019-01-05 16:09:13 · 1591 阅读 · 0 评论 -
Java学习笔记34:集合和数组区别
集合:存储任意对象,长度可变数组:定义长度固定,无法自动增长区别:1.长度2.数组既可以存储基本数据类型也可以存储引用数据类型集合只能存储对象,即使存储基本数据类型进入后也会封箱变成对象...原创 2019-01-05 16:35:24 · 99 阅读 · 0 评论 -
Java学习笔记10:Eclipse界面恢复默认、恢复目录
1、选择Eclipse的工具栏里面的“窗口(Window)”,找到“复位透视图(Reset Perspective)”选项;2、单击“复位透视图(Reset Perspective)”,选择“是”;3、但是呢,我们往往发现重置的窗口布局里有时候少了一些我们想要的窗口,比如说控制台等等。这时候不要着急,依然是“窗口”,这次我们选择“显示视图”。...原创 2019-01-01 17:13:26 · 783 阅读 · 1 评论 -
Java学习笔记11:重载的理解
重载:在一个子类或类中,方法的名称相同,但参数的个数、类型以及参数类型顺序不同,构成重载。调用时,编译器根据实参个数类型具体选择,即实参列表与方法参数列表对比。package create;//参数类型、参数个数均有效重载public class Overload {public void action(int x){System.out.print(“定义一个int参数”);}...原创 2019-01-01 19:15:29 · 94 阅读 · 0 评论 -
Java学习笔记12:交换两个变量
public class TestPassByValue { public static void main(String[] args) { int num1 = 1; int num2 = 2; System.out.println("交换前 num1 的值为:" + num1 + " ,num2 的值为:" + nu...原创 2019-01-01 21:36:25 · 112 阅读 · 0 评论 -
Java学习笔记35:集合的遍历
@SuppressWarnings(“unchecked”)import java.util.ArrayList;import java.util.Collection;public class Demo1_Collection {//集合的遍历public static void main(String[] args) {@SuppressWarnings(“rawtypes”)C...原创 2019-01-05 22:29:06 · 159 阅读 · 0 评论 -
Java学习笔记36:迭代器遍历(for 、while)
原创 2019-01-05 23:03:46 · 741 阅读 · 0 评论 -
Java学习笔记13:方法的可变参数
package Varags;/* * 可变参数 JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。 方法的可变参数的声明如下所示: typeName... parameterName 在方法声明中,在指定参数类型后加一个省略号(...) 。一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。*/public clas...转载 2019-01-01 22:13:27 · 203 阅读 · 0 评论 -
Java学习笔记14:Scanner读取文件
Scanner 不仅能从输入流中读取,也能从文件中读取,除了构建 Scanner 对象的方法,其他和上文给出的完全相同,以下案例从一个名为 test.txt 的文件中读取整数。test.txt 文件内容:12345Fileio.java 文件内容:import java.io.File;import java.io.FileNotFoundException;import ja...原创 2019-01-01 22:42:51 · 1115 阅读 · 0 评论 -
Java学习笔记15:java中的hashcode哈希码、hash 算法
在Java中,哈希码代表了对象的一种特征,例如我们判断某两个字符串是否==,如果其哈希码相等,则这两个字符串是相等的。其次,哈希码是一种数据结构的算法。常见的哈希码的算法有:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法...原创 2019-01-02 14:42:16 · 782 阅读 · 0 评论