自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 关于Stream转Map的Duplicate key异常处理

关于Stream转Map的Duplicate key异常处理1.问题复现2.解决方案1.问题复现先初始化一个 School 的集合,然后将该集合转成一个 Map,key 为 id, value 为 name。注:学校的 id 设置为重复的。上代码:public static void main(String[] args) { List<School> schoolList = Lists.newArrayList( new School

2021-12-24 18:15:29 1239

原创 四种主要的 IO 模型

四种主要的 IO 模型1.内核缓冲区和进程缓冲区2.阻塞和非阻塞3.同步和异步4.四种 IO 模型4.1 同步阻塞 IO4.1.1举个栗子4.1.2 阻塞 IO 的优缺点4.2 同步非阻塞 NIO4.2.1举个栗子4.2.2 同步非阻塞 IO 的优缺点4.2.3 说明4.3 IO 多路复用模型4.3.1举个栗子4.3.2 特点4.3.3 优缺点4.4 异步 IO 模型 (AIO)4.4.1 AIO 基本流程4.4.2 举个栗子4.4.3 优缺点1.内核缓冲区和进程缓冲区说到 IO 模型的时候,我们先说说

2020-08-19 00:04:37 554

原创 spring boot自定义线程池进行异步调用

spring boot自定义线程池进行异步调用1. 创建默认线程池2.创建异步任务类3.异步调用类4.有返回值的异步任务5.注意事项大型超市里,通常都不止一个收银台,因为这样可以提高效率,设想一下,如果某一天,其他的收银员都请假了,只剩下一个收银台,看着那漫长的排队大军,是不是很捉急,很无奈。这就是异步存在的意义了。当我们需要异步调用的时候,很容易就想到多线程的方式,先创建线程池,然后实现 Runnable 或者 Callable 接口来创建对象,然后将对象放在线程池中去执行。除了这个,spring 提

2020-08-08 11:26:25 343

原创 List 和 Map 的排序

List 和 Map 的排序List 的排序1. 新建 User 类并初始化集合1.1新建 User 类1.2 初始化集合2. 排序2.1 根据 age 倒序排序2.2 使用 lambda 表达式的写法会更简洁Map 的排序1. 按照 key 的排序1.1 正序排序1.2 倒序排序1.3 lambda 表达式的写法2. 按照 value 排序2.1 按照 value 倒序排序2.2 lambda 表达式的写法欢迎关注公众号:一盐难进今天说下 List 和 Map 的排序问题,用的比较多,做个记录。Lis

2020-07-12 15:10:09 719

原创 迭代器和foreach

迭代器和foreach1.迭代器2.Collection 和迭代器3.ListIterator4.Foreach小结对于任何容器类,都必须有某种方式可以插入元素并且将它们返回。比如对于 LIst,add() 方法是插入元素的操作之一,而 get() 方法是取出元素的操作之一。如果要使用容器,就需要对容器的确切类型进行编程。那么有没有方法在使用容器的过程中不需要关心容器类型,就可以让代码应用于不同...

2019-06-30 14:33:07 2116

原创 Java栈和队列

Java栈和队列1.Stack2.Queue3.PriorityQueue小结栈和队列用来存储一组有序的值,二者很相似,栈是一种先进后出的结构,也就是最后保存的元素最先被访问;队列是一种先进先出的结构,也就是最先保存的元素最先被访问。1.Stack栈通常是指先进后出的容器。有时候栈也被称为叠加栈,因为最后压入的元素,第一个弹出栈,有图有真相:Stack 框架图:可以看出 Stack ...

2019-06-30 14:25:47 197

原创 Map简介

Map简介HashMapTreeMapMap 的遍历小结Map 是一组成对的“键值对”对象,允许使用键 (key) 来查找值 (value)。它提供了一个映射表,可以通过某个对象来查找另一个对象。它也被称作关联数组,因为它将某些对象与另外一些对象关联在一起;或者称作字典,通过键对象来查找值对象,就像在字典中使用单词来定义一样。Map 基本特性:以 key-value 键值对的形式存储数据,...

2019-06-30 14:18:46 2281

原创 Set 简介

Set 简介HashSetTreeSet小结Set 和 List 一样,也是继承 Collection 接口,Set 不保存重复的元素,如果试图将相同对象的多个实例添加到 Set 中,那么不好意思,它会立马阻止。Set 判断两个对象是否相同,使用的是 equals() 方法,只要该方法的结果是 true,Set 就不会接收这个对象。Set 具有和 Collection 完全一样的接口,因此没有...

2019-06-22 10:07:19 1100 1

原创 List简介

List简介ArrayListLinkedList小结List 接口继承自 Collection,在上一章 Java 容器 中已经介绍过,List 接口在 Collection 的基础上添加了大量的方法,使得可以在 List 的中间插入和移除元素。List 有两种类型:ArrayList,它随机访问元素速度较快,但是在 List 的中间插入和移除元素时较慢;LinkedList,它可以以较...

2019-06-22 10:01:26 576

原创 Java容器

Java容器容器Collection 的基本使用Arrays 和 Collections容器的打印我们在 数组初始化 中已经学习过数组,它是编译器支持的类型,数组是保存一组对象或基本类型最有效的方式,但是数组有固定的尺寸,那么在某些场景中,需要更加复杂的方式来存储对象,数组就明显不合适了。但是 Java 类库提供了一套相当完整的容器类来解决这个问题。容器容器的基本类型是 List、Set、Q...

2019-06-22 09:43:14 383

原创 匿名内部类

匿名内部类匿名内部类的创建注意事项匿名内部类只能访问 final 局部变量匿名内部类的使用匿名内部类的创建话不多说,先看看下面这段奇怪的代码:public class OuterClass { /** * 获取 Contents 对象 * @return */ public Contents getContents() { re...

2019-05-26 23:22:00 130

原创 内部类基础

内部类基础什么是内部类内部类的创建与外部类的联系.this 语法.new 语法内部类的向上转型内部类的访问权限方法中的内部类作用域中的内部类什么是内部类在 Java 中,可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类的创建内部类的创建就像它的定义一样,将类置于其他类的内部即可,如下:public class OutClass { /** * 内部类 ...

2019-05-26 23:17:35 147

原创 接口扩展

接口扩展在 Java 中,一个类去继承多个类是被禁止的,但是一个类却可以通过 implements 关键字去实现多个接口,就像下面这段代码:public class Children implements CanEat, CanPlay { @Override public void eat() { System.out.println("I can eat"...

2019-05-21 23:43:21 555

原创 工厂模式

工厂模式在开发的过程中,当我们有大量公共接口的类需要实例化,而且事先不知道要实例化哪一个类的时候,就可以使用工厂模式了,它会创建一个用来创建目标接口对象的工厂接口,然后由工厂接口的实现类去决定去实例化哪一个类。代码实现:/** * 水果接口 */public interface Fruit { //定义两个抽象方法 void buyFruit(); void ...

2019-05-21 23:40:14 111

原创 适配器模式

适配器模式对象适配器类适配器小结当我们需要将一个类的接口转换成用户需要的另外一个接口的时候,就可以使用适配器模式了,它可以让两个没有关联的类一起工作。适配器分为两种:对象适配器和类适配器。对象适配器我们引用上一章的 Processor 接口,在这里作为目标接口:public interface Processor { public Object process(Object in...

2019-05-06 22:18:27 131

原创 策略模式

策略模式我们在平时开发中,有时候会遇到这种情况,就是一个功能有多种不同的算法实现和策略,我们需要根据不同的环境来选择不同的策略,这时候,就需要用到策略模式了,就是创建一个能够根据所传递的参数对象的不同而具有不通行为的方法。先看看代码实现:public interface Processor { public Object process(Object input);}cla...

2019-05-06 22:15:47 115

原创 抽象类和接口

抽象类和接口抽象类接口抽象类有时候父类会为它的所有子类创建一些通用方法,而这些方法表示所有子类的公共部分,但是子类可以分别重写这些方法来实现不同的功能。这个时候,我们就可以使用抽象方法了,但是这种方法是不完整的,仅有声明而没有方法体,下面就是抽象方法的语法:/** * 抽象类 */public abstract class AbstractSport { /** * ...

2019-04-28 22:04:00 115

原创 构造器与多态

构造器与多态我们在文章 Java 的继承 中已经介绍了,子父类的构造器的加载过程,是按照继承层次逐层向上,在子类的构造器中,如果没有明确指明调用父类的哪一个构造器,那么就会调用默认构造器,确保每个父类的构造器都能得到调用,如果父类中不存在默认构造器,那么编译器就会报错。构造器是特殊的方法,实际上是隐式的 static 方法,当构造器涉及到多态的时候,就有必要了解构造器是怎样通过多态在复杂的层次...

2019-04-24 20:47:48 201

原创 关于Java多态

关于Java多态向上转型绑定在面向对象的语言中,有三个基本特征:封装,继承,多态。封装是通过将某些特征和行为合并起来创建新的数据类型;继承是子类通过 extends 关键字来获取父类的方法和属性,同时继承允许将对象视为它自己本身的类型或子类类型来处理;多态的作用就是消除类型之间的耦合关系,多态方法调用允许一种类型表现出与其他类型的区别,只要他们是从同一个父类中继承而来的即可。向上转型我们知道...

2019-04-21 23:14:08 128

原创 final关键字

final关键字final 变量final 方法final 类Java 的 final 关键字,通常指的是“这是无法改变的”。本文介绍 final 关键字的三种用法,即变量、方法和类。final 变量用 final 来修饰一个成员变量,就是告诉编译器这个变量是恒定不变的,我们通常希望达到以下效果:1. 一个永不改变的编译时常量2. 一个在运行时被初始化的值,并且不希望它被改变对于编译时...

2019-04-17 20:46:54 108

原创 Java的继承

Java的继承继承语法父类初始化带参数的父类初始化复用代码是 Java 众多引人注目的功能之一,但是想成为一门极具革命性的语言,仅仅能够复制代码并加以改变是远远不够的,它必须能够做更多的事情。继承语法继承无处不在,每当创建一个类的时候,就已经在继承了,因为,除非明确指出要从其他类中继承,否则所有的类都从隐式地从根类 Object 类中进行继承。继承通过关键字 extends 实现,子类会自...

2019-04-15 23:19:42 143

原创 Java 访问修饰符

Java 访问修饰符publicprotecteddefaultprivate我们先来说说消费者(客户端程序员)和生产者(类库开发人员)之间的关系,从消费者的角度出发,他们希望你的代码代码保持不变,哪怕是出现了新版本,这样就不耽搁他们的调用;但是从生产者的角度出发,他们必须对代码进行修改,以确保功能的更新,但同时又要兼顾这些改动不会对消费者造成影响。所以情况已经很明显了,一边要改,一边不让改,...

2019-04-09 21:17:04 197

原创 Java类库:包

Java类库:包Java 的源代码文件package 关键字Java 解释器Java 的源代码文件当编写一个 Java 源代码文件时,这个文件通常被称为编译单元,也就是类文件。每个编译单元都必须有一个后缀名 .java,而在编译单元里面有且仅有一个 public 类,多的编译器不收,这个 public 类的名称必须与编译单元的文件名相同。package 关键字当编译一个 .java 文件时...

2019-04-06 22:09:06 288

原创 数组初始化

数组初始化数组new 关键字可变参数列表数组数组是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。定义数组是是通过方括号 [] 来实现的,只需要在类型名后面加一个方括号即可:int [] a;这样就给拥有了对数组的一个引用,还没有分配任何空间,而编译器又不允许指定数组的大小,那么为了给数组分配存储空间,就需要使用初始化表达式了,这种初始化操作是由一堆花括号来实现的...

2019-03-27 21:46:51 2338

原创 构造器初始化

构造器初始化构造器初始化静态变量初始化非静态实例初始化对象创建过程构造器初始化先来看看下面这段代码:public class ConstructTest { private int n; public ConstructTest() { //通过构造器来初始化 n = 5; }}以上代码通过无参构造器来对全局变量 n 进行初始...

2019-03-24 11:09:03 1933

原创 变量初始化

变量初始化局部变量和全局变量指定初始化局部变量和全局变量在 Java 中,尽量保证所有的变量在使用前都能得到恰当的初始化。如果一个局部变量未初始化,如下:public int test() { int i; //报错,提示没有初始化 return i; }那么编译器会报错,会强制程序员对局部变量进行初始化。如果是类中的全局变量,那么情况会有所不同:...

2019-03-14 23:17:08 584

原创 this 关键字的使用

this 关键字的使用this 的基本使用返回当前对象的引用将当前对象传递给其他方法在构造器中调用构造器static 和 thisthis 的基本使用如果你希望在方法的内部获得对当前对象的引用,那么就可以使用 this 关键字,this 只能在方法的内部使用,表示对 “调用方法的那个对象” 的引用。public int weight;public int num;public void...

2019-03-12 23:05:41 208

原创 方法重载

方法重载什么是方法重载重载方法的区分涉及基本类型的方法重载什么是方法重载方法重载其实我们在上一章中 关于构造器 已经用到了,在 People 类中同时使用了无参构造器和有参构造器,由于是都是构造器,所以它们必须有相同的名字,也就是类名。所谓方法重载,就是方法名相同而形式参数不同的多个方法。调用时,会根据不同的参数列表选择不同的方法。以下是重载的构造器和重载的方法:public class P...

2019-03-09 17:06:18 267

原创 Java构造器的理解

Java构造器的理解构造器的引入构造器的命名构造器的形式super 关键字构造器的引入当我们想获取某一个类的对象的时候,其中最简单也是最快的方法就是通过 new 关键字来获取://获取 people 对象People perple = new People();这个过程,就是引用了 People 类的无参构造器,这就确保了你能操作对象之前,它已经被初始化了。在 Java 中,通过提供构...

2019-03-09 17:02:05 331

原创 控制代码的执行流程

控制代码的执行流程何谓控制代码执行流程if - else 语句迭代forforeach 语法return 关键字break 和 continue 关键字switch 关键字何谓控制代码执行流程所谓控制代码执行流程,就是利用关键字 if - else、while、do - while、for、return、break 以及选择语句 switch 来控制代码走向。if - else 语句if ...

2019-03-09 16:56:21 742

原创 Java操作符

关于操作符前言优先级赋值算数操作符自动递增和递减关系操作符逻辑运算符前言操作符作用于操作数,生成一个新值。几乎所有的操作符都只能操作 “基本类型”。但是 “=”, “==”, “!=”, 这些操作符能操作所有的对象。优先级当代码中一个表达式有多个操作符时,操作符的优先级决定了各部分的计算顺序。最简单的规则就是先乘除后加减。基本顺序归纳如下:名称符号分隔符. [] (...

2019-03-09 16:41:36 1011

原创 Java的代码规范

Java的代码规范前言命名规范格式规范OOP 规约(面向对象编程规约)前言20 世纪 80 年代末,有家公司写了一个很流行的杀手应用,许多专业人士买来用,然而发布周期逐渐拉长,装载时间越来越久,终于,在之后的某天,这家公司关门大吉了。当年到底发生了什么,后来一位雇员道出原由,原来,他们赶着出产品,代码写的乱七八糟,特性越加越多,代码越来越烂,最后再也没有办法管理这些代码了。所以,是糟糕的代码毁...

2019-03-09 16:28:52 313

原创 Java程序的构建

Java程序的构建前言类字段方法导包static 关键字创建Java程序(Hello World):包,类的创建前言有一个前辈说过这么一个段子,有一个做 Java 语言的程序猿退休了,午后先来无事,练一波字,拿起毛笔,抬头看天,片刻后,”Hello World!” 跃然纸上,抑扬顿挫,荡气回肠。相信很多程序猿入行的时候都写过大名鼎鼎的 Hello World 的打印代码,恰好我也是其中一猿。...

2019-03-09 16:19:54 1306

原创 关于Java对象的理解

关于Java对象的理解面向对象语言的五个基本特性用引用操纵对象抽象数据类型 — 类特例:基本类型高精度数字Java中的数组访问控制继承对象的生命周期面向对象语言的五个基本特性1)万物皆为对象。理论上可以抽取用作解决问题的任何概念化构件(哈士奇,防御塔等),将其表示为程序中的对象。2)程序是对象的集合,通过发送消息来告知彼此所要做的。3)每个对象都有自己的由其他对象所构成的存储。可以在程序中...

2019-03-09 16:09:20 611

原创 IDEA的基本使用

IDEA的基本使用欢迎使用 IDEA下载安装IDEA基本设置1.设置键盘习惯2.自动编译开关设置3.忽略大小写开关设置4.智能导包开关5.悬浮提示开关6.取消单行显示 tabs 的操作7.设置代码区字体和字体大小8.设置行号显示9.设置字符集编码10.设置项目的 JDK 版本12.设置 project 的 JDK 版本13.配置 Modules 的 JDK 版本14.检查平台的 JDK 版本15....

2019-03-09 15:37:05 294

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除