Java
文章平均质量分 84
赵jc
这个作者很懒,什么都没留下…
展开
-
Lambda表达式
Lambda表达式背景基础语法函数式接口Lambda表达式的基本使用变量的捕获匿名类中的变量捕获Lambda中的变量捕获Lambda在集合当中的使用Lambda的优点和缺点背景Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式可以看作是一个匿名函数。基础语法基本语法: (parameters)原创 2021-03-05 18:42:02 · 3125 阅读 · 3 评论 -
Java--枚举
枚举枚举的背景和定义枚举的使用switch常用的方法枚举和反射相关面试题写一个单例模式用静态内部类实现一个单例模式用枚举实现一个单例模式枚举的优缺点枚举的背景和定义枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式:public static int final RED = 1; public static int final GREEN = 2; public static int final BLACK = 3;但是常量举例有不好的地原创 2021-03-05 16:27:30 · 136 阅读 · 1 评论 -
Java--反射
反射定义用途(了解)反射基本信息反射相关的类Class类(反射机制的起源)反射的使用反射优点和缺点定义Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。用途(了解)1、在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对原创 2021-03-03 17:15:25 · 2490 阅读 · 1 评论 -
java--哈希表(hash)
hash哈希的引入哈希冲突避免冲突设计合适的哈希函数负载因子的调节(重点)解决冲突闭散列(开放地址法)开散列(链地址法)重点hash和java类集的关系哈希的引入顺序结构以及二叉搜索树中,元素与其存储位置之间没有对应关系,因此在查找一个元素时,必须要经过多次比较。顺序查找时间复杂度为O(N),二叉搜索树中为树的高度,即O(log2n).哈希的思想是不经过任何比较,一次直接从表中得到要搜索的元素。( 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与其之间能够建立一一映射的关系,那原创 2021-02-10 17:13:05 · 2042 阅读 · 0 评论 -
Map和Set
Map和Set概念和场景两种模型MapSet概念和场景Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的 搜索方式有:1.直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢2.二分查找,时间复杂度为O(log2n) ,但搜索前必须要求序列是有序的上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:1.根据姓名查询考试成绩2.通讯录,即根据姓名查询联系方式3.不重复集合,即需要先搜原创 2021-02-06 21:04:03 · 374 阅读 · 3 评论 -
Java--二叉搜索树
二叉搜索树概念重要操作查找插入删除(重点)总结概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树(二叉树的性质嘛)如下图便是一个二叉搜索树重要操作查找核心代码public BSNode search(int val) { if (root == null) return null;原创 2021-02-04 19:29:36 · 104 阅读 · 0 评论 -
Java内部类
内部类实例内部类静态内部类匿名内部类内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里来小结一下。从种类上说,内部类可以分为四类:实例内部类、静态内部类、匿名内部类、局部内部类。我们来一个个看:实例内部类实例内部类: 定义在类的内部的一个类。public class InnerClassTest { public class InnerClassA { }}举例:class OuterClass { pu原创 2021-02-03 17:25:26 · 75 阅读 · 0 评论 -
Java基本排序总结(Sort)
这里写目录标题什么是排序排序的定义排序的相关术语排序的分类算法分析直接插入排序算法描述算法分析实现代码堆排序算法描述算法分析实现代码二级目录二级目录三级目录什么是排序排序的定义对一序列对象根据某个关键字进行排序(通俗点来说就是吧一堆数据按照从小到大(升序),或者从大到小排列(降序))排序的相关术语稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面内排序:所有排序操作都在内存中完成外排序:由于数据太大,因此把数据原创 2021-02-02 18:38:37 · 1414 阅读 · 1 评论 -
Java--堆(优先级队列)
堆/优先级队列引入堆(heap)一级目录二级目录三级目录引入二叉树的顺序存储存储方式使用数组保存二叉树结构,即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。2. 下标关系已知双亲(parent)的下标,则: 左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右)(child)下标,则: 双亲(parent)下标 = (chil原创 2021-01-30 17:12:28 · 193 阅读 · 0 评论 -
Java--二叉树
二叉树树树的概念树的相关性质树的表示形式树的应用二叉树(非常重要☆)二叉树的概念二叉树的基本形态特殊的二叉树满二叉树完全二叉树二叉树的性质二叉树的存储顺序存储链式存储二叉树的遍历前序遍历中序遍历后续遍历层序遍历一级目录二级目录三级目录树树的概念在学习二叉树之前我们先来了解一下树。树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根在上,而叶子在下的。它具有以下的特点:有一个特殊的节点,称为根节点,根节点原创 2021-01-28 17:31:08 · 275 阅读 · 1 评论 -
Java集合之队列(Queue)
队列Queue队列的概念队列的分类普通队列优先级队列双端队列队列的实现单链表实现普通队列数组实现循环队列队列的概念队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有先进先出FIFO(First In First Out)的特点(栈只可以在一端进行插入删除操作,而队列可以在两端进行操作)入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Front)队列的分类普通队列普通队列:只有先进先出的特点。优先级队列原创 2021-01-24 19:03:48 · 512 阅读 · 0 评论 -
Java集合之栈(顺序表实现)
栈Stack栈的相关定义实现栈的相关定义栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,向栈顶压入数据。出栈:栈的删除操作叫做出栈。从栈顶弹出数据。实现1.利用顺序表实现,即使用尾插 + 尾删的方式实现2.利用链表实现,则头尾皆可相对来说,顺序表的实现上要更为简单一些,所以我们优先用顺序表实现栈原创 2021-01-23 19:09:40 · 398 阅读 · 0 评论 -
Java包装类知识总结
包装类基本数据类型和包装类直接的对应关系包装类的使用装箱(装包)拆箱(拆包)练习java 引入了一类特殊的类,即这 8 种基本数据类型的包装类,在使用过程中,会将类似 int 这样的值包装到一个对象中去。为什么会引入包装类呢,当我们需要对一个简单的数字进行一些操作时,可以将其变为包装类而是用其中的一些方法,而不需要我们自己去实现了。基本数据类型和包装类直接的对应关系包装类的使用装箱(装包)装包分为显示和隐式装包public static void main(String[] args) {原创 2021-01-21 19:36:56 · 118 阅读 · 0 评论 -
Java泛型知识点总结
泛型的引入Generic泛型的引入泛型泛型类的定义泛型背后作用时期和背后的简单原理泛型类的使用总结泛型的引入问题:我们之前实现过的顺序表,只能保存 int 类型的元素,如果现在需要保存 指向 Person 类型对象的引用的顺序表,请问应该如何解决?如果又需要保存指向 Book 对象类型的引用呢?回答:首先,我们在学习多态过程中已知一个前提,基类的引用可以指向子类的对象(向上转型)其次,我们也已知 Object 是 java 中所有类的祖先类。那么,要解决上述问题,我们很自然的想到一个解决办法原创 2021-01-21 17:19:31 · 102 阅读 · 0 评论 -
Java中String知识总结
StringString的常见创建方式字符串比较==比较equals比较字符常量池字符串不可变字符、字节与字符串字符与字符串字节与字符串字符串常见的操作字符串比较字符串查找字符串替换字符串拆分字符串截取其他常用的方法String、StringBuffer 和 StringBuilderString、StringBuffer 和 StringBuilder之间的转换String、StringBuffer 和 StringBuilder之间的区别Sting类不管在任何一个语言中都是非常重要的,我们在很多地方都原创 2021-01-20 22:02:44 · 250 阅读 · 3 评论 -
Java中异常知识点总结
异常什么是异常异常体系Throwable体系:Throwable中的常用方法:异常的分类异常的用法捕获异常基本语法举例异常处理的流程关于 finally 的注意事项抛出异常异常说明二级目录三级目录什么是异常异常,就是不正常的意思。指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,原创 2021-01-19 16:25:29 · 757 阅读 · 0 评论 -
Java抽象类、接口知识总结
抽象类、接口抽象类什么是抽象类语法规则注意事项接口什么是接口语法规则扩展(extends) vs 实现(implements)注意事项接口的实例(常见的接口)CompareableCompareatorCloneable(实现深拷贝)总结有些具体的方法交给子类实现,自己不需要实现抽象类什么是抽象类在之前多态的打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法,原创 2021-01-17 23:27:06 · 215 阅读 · 0 评论 -
Java三大特性之多态
在了解多态之前我们需要先了解一些相关的知识:向上转型多态向上转型什么是向上转型?什么时候发生向上转型?向下转型注意事项:@Override三级目录向上转型什么是向上转型?向上转型:通俗点来说就父类引用“引用“”子类对象(我是这样理解的:因为是把子类给父类,把小给大,所以是向上层转变呢)注意:向上转型后,父类只能访问自己的属性和方法,而不能访问子类特有的属性字段和方法。举例:class Animal{ public String name; private int age;原创 2021-01-17 16:22:52 · 117 阅读 · 1 评论 -
Java中任意进制之间转换
进制转换十进制转换为别的进制别的进制转换为十进制任意进制之间的转换用十进制过度除留取余数法十进制转换为别的进制直接调用Integer.toString方法(public static String toString(int i,int radix))第一个参数是要转换的数字,第二个参数是要转换成为的进制。当数字为十进制的时候认为是 int (或者long,BigInteger…)是个数字类型当数字为其他进制的时候则被认为 是String 类型举例import java.util.*;pu原创 2021-01-15 16:33:04 · 3527 阅读 · 2 评论 -
Java三大特性之继承
继承背景举例分析引出继承语法规则基本语法protected 关键字super关键字final关键字(密封类)多层继承组合Java 中对于字段和方法共有四种访问权限小结什么时候下用哪一种呢?背景代码中创建的类, 主要是为了抽象现实中的一些事物(包含属性和方法).有的时候客观事物之间就存在一些关联关系(它们中有一些相同的特征,具有一些共有的东西) 那么在表示成类和对象的时候也会存在一定的关联.举例例如, 设计一个类Animal表示动物,它有name和age两个字段,还有吃的行为。然后再新建两个Dog和原创 2021-01-12 22:45:50 · 165 阅读 · 0 评论 -
Java三大特性之封装
封装什么是封装如何实现封装private实现封装直接使用 public使用 private 封装属性,并提供 public 方法供类的调用者使用注意事项getter和setter方法三级目录什么是封装在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.这样就降低了类使用者的学习和使用成本, 从而降低了代码复杂程度。如何实现封装private实现封装private/ public 这两个关键原创 2021-01-12 22:44:50 · 111 阅读 · 0 评论 -
Java中 包 相关知识总结
Java中的包非常重要,它关系到java中的继承。我们需要对其有一定的了解。包包的定义和存在的意义将类放到包中操作步骤基本规则常见的系统包如何导入包中的类正常导入静态导入注意事项包的访问控制权限包的定义和存在的意义在讲继承前我们必须知道包。包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性.例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过.类比于windows,当前目录为E:\J原创 2021-01-12 14:25:42 · 433 阅读 · 1 评论 -
双向链表java实现
双向链表其实就比单链表多了一个前驱而已(用来存放上一个节点的位置)但要注意的是头结点的prev为null,最后一个结点的next域为null。实现代码如下public class ListNode { public int val; public ListNode next; public ListNode prev; //alt+insert -> Constructor public ListNode(int val) {原创 2021-01-10 21:37:49 · 204 阅读 · 0 评论 -
单链表的实现
之前的实现的顺序表有如下缺点顺序表中间/头部的插入删除,时间复杂度为O(N)增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。那么 如何解决以上问题呢?我们就需要用链表来解决了,我们就来聊一下链表。链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。概念肯能听起来有点绕,我们来举一原创 2021-01-02 11:03:42 · 800 阅读 · 0 评论 -
顺序表的实现
顺序表的概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改等。顺序表一般可以分为:静态顺序表:使用定长数组存储动态顺序表:使用动态开辟的数组存储。静态顺序表适用于确定知道需要存多少数据的场景.静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.接口实现我们来实现一个动态顺序表. 以下是需要支持的接口.public class SeqList {原创 2020-12-29 18:41:05 · 508 阅读 · 0 评论 -
时间复杂度和空间复杂度
在聊时间复杂度和空间复杂度之前我们先来了解一下算法的效率吧。算法的效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。时间复杂度时间复杂度的概念大O的渐进表原创 2020-12-29 18:26:04 · 335 阅读 · 0 评论 -
类和对象
一.对象的初步认识面向过程和面向对象的区别C语言是面向过程的,关注的是过程,分析楚求解问题的步骤,通过函数调用逐步解决问题。JAVA是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互来完成。面向过程注重的是过程,在整个过程中所涉及的行为就是功能。面向对象注重的是对象,也就是参与过程中所涉及到的主体。这个主体中有一些相应的功能。举例:面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱的行为。冰箱就是一个对原创 2020-12-29 15:09:59 · 195 阅读 · 0 评论 -
java中数组拷贝的四种方式
java中数组拷贝常用的四种方法为cloneSystem.arraycopyArrays.copyOffor循环拷贝代码举例如下:public class TestDemo { public static void main(String[] args) { for_copy(); clone_copy(); arraycopy_copy(); ArrayscopyOf_原创 2020-12-27 22:02:44 · 337 阅读 · 0 评论 -
Java基本类型总结
**java中基本类型出现的原因:**在Java编程思想的第一章就讲到:万物皆对象,new一个对象存储在堆中,我们通过堆栈的引用来使用这些对象,但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效。分类Java有8种基本类型,大致可以分为3类:字符型、布尔型、数值型。1. 数值类型整数类型原创 2020-12-06 23:13:47 · 190 阅读 · 0 评论