自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

L-Joy的博客

执剑走天涯

  • 博客(182)
  • 论坛 (1)
  • 问答 (3)

原创 HashTable特点(jdk1.8)

简单写一写HashTable的特点~继承树HashTable的继承树如下图: 特点(1)底层使用Entry数组保存元素(2)默认初始容量是11,加载因子是0.75。 /** * Constructs a new, empty hashtable with a default initial capacity (11) * and load factor (0...

2019-10-08 21:09:56 248

原创 LinkedHashMap特点(jdk1.8)

结束上篇的HashMap扩容分析,今天来聊聊LinkedHashMap的特点,继承了HashMap类(以下都是基于jdk1.8)。之前简单聊过LinkedHashSet的特点,它的底层实际就是使用的LinkedHashMap。 继承树LinkedHashMap的继承树如下图: 特点(1)由于继承HashMap类,所以默认初始容量是16,加载因子是0.75。accessOrder为fals...

2019-10-08 16:20:34 121

原创 深入理解HashMap扩容(JDK1.8)---源码分析

HashMap有自动扩容机制,那么它是如何扩容的?本篇带你跟着源码一步步走近。以下都是基于jdk1.8的。 Let's start从HashMap的put方法入手,逐步深入: /** * Associates the specified value with the specified key in this map. * If the map previously co...

2019-10-07 19:54:42 509 4

原创 HashMap指定初始容量的构造函数-基于源码分析

今日主题是源码分析之HashMap指定初始容量的构造函数(以下都是基于jdk1.8)。HashMap可以指定初始容量大小的构造函数有两个: /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arg...

2019-09-15 09:18:20 212

原创 HashMap常量设计目的

HashMap中有哪些常量?这些常量设计的目的是什么?本篇带你走近Doug Lea、Josh Bloch、Arthur van Hoff、 Neal Gafter对HashMap的设计。(以下都是基于jdk1.8) 常量设计(1)HashMap默认初始化大小是1 << 4(即16) /** * The default initial capacity - MUST...

2019-09-14 17:23:50 209 1

原创 HashMap类注释解析

结束了Collection集合的summary,现在先来看看Map集合下的HashMap的类注释。以下都是基于jdk1.8的。 继承树HashMap继承树如下图:HashMap类注释解析(1)HashMap是基于Map接口实现的,它提供了Map中所有的操作,并且允许key和value为null。HashMap跟HashTable基本一样,只是HashMap是线程不安全的,并且HashMa...

2019-09-12 11:28:28 178

原创 Vector扩容机制源码分析

再来稍微聊一下Vector的特点。 继承树Vector继承树如下图:特点(1)允许null值(2)底层使用动态对象数组Object[] elementData(3)默认初始容量是10(4)线程安全,通过synchronized锁得以保证(5)fail-fast机制...

2019-09-12 08:28:32 283

原创 LinkedList特点

聊一聊LinkedList的特点吧~(以下都是基于jdk1.8) 继承树LinkedList的继承树如下图:特点(1)允许null值(2)内部以双向链表的形式来保存集合中的元素 /** * Pointer to first node. * Invariant: (first == null && last == null) || * ...

2019-09-11 20:17:50 2096

原创 ArrayList源码分析(jdk1.8)

聊一聊ArrayList的特点吧~(以下都是基于jdk1.8) 继承树ArrayList的继承树如下图: 特点(1)底层使用动态数组Object[] elementData 来保存所有元素(2)线程不安全。可通过如下方式使用线程安全的操作:List list = Collections.synchronizedList(new ArrayList(...));(3)默认初始容量...

2019-09-11 20:02:48 70

原创 PriorityQueue特点-基于源码分析

愉快地聊一聊PriorityQueue的特点吧~(以下都是基于jdk1.8) 一棵树PriorityQueue的继承树如下图: 基本特点(1)双端队列,可从两端添加、删除元素。作为队列使用时,性能优于LinkedList。作为栈使用时,性能优于Stack。(2)底层使用可变数组Object[] elements, 数组容量按需增长(3)不能存储null(4)支持双向迭代器遍历(5...

2019-09-11 15:30:47 127

原创 ArrayDeque源码分析

愉快地聊一聊ArrayDeque的特点吧~(以下都是基于jdk1.8) 一棵树ArrayDeque的继承树如下图: 基本特点(1)双端队列,可从两端添加、删除元素。作为队列使用时,性能优于LinkedList。作为栈使用时,性能优于Stack。(2)底层使用可变数组Object[] elements, 数组容量按需增长(3)不能存储null(4)支持双向迭代器遍历(5)线程不安全...

2019-09-10 16:01:26 68

原创 TreeSet特点

聊一聊TreeSet的特点吧~(以下都是基于jdk1.8) 继承树TreeSet的继承树如下图: 特点(1)底层使用TreeMap来保存所有元素(2)线程不安全。可通过如下方式使用线程安全的操作:SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));(3)能够确保集合元素处于排序状态,依赖于compar...

2019-09-08 20:09:17 478

原创 LinkedHashSet源码分析

  今天来聊聊LinkedHashSet,继承了HashSet类,基于LinkedHashMap来实现(以下都是基于jdk1.8)。 继承树LinkedHashSet的继承树如下图: 源码之旅(1)底层基于LinkedHashMap实现,默认初始容量是16,加载因子是0.75 public LinkedHashSet() { super(16, .75f, tr...

2019-09-08 17:52:39 103

原创 HashSet部分源码分析

  今天来简单讲讲HashSet,因为HashSet实际上是基于HashMap来实现的,底层使用HashMap来保存集合元素,关于HashMap会在接下来的博客中加以介绍,所以这次HashSet就简单写一写了。(以下都是基于jdk1.8) 继承树HashSet的继承树如下图: 类注释解析(1)基于HashMap实现,不能保证集合的迭代顺序;特别是它不能保证元素的顺序不随时间而改变。且允...

2019-09-08 17:09:23 70

原创 Collection集合与Map集合体系

Java集合大致可以分为Set、List、Queue、Map四种体系,其中set代表无序、不可重复的集合;List代表有序、重复的集合;Map代表具有映射关系的集合;Java5增加的Queue体系代表一种队列集合实现。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口和实现类。 Collec...

2019-09-08 09:56:17 238

原创 【多线程】wait与notify

wait与notify

2019-08-18 21:46:07 70

原创 Loading class `com.mysql.jdbc.Driver'. This is deprecated.

警告信息“Loading class ‘com.mysql.jdbc.Driver’. This is deprecated. The new driver class is ‘com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver ...

2019-08-06 10:11:19 969 1

原创 连mysql报错The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone

EurekaClient配置连接数据库出现如下问题:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via...

2019-08-06 09:57:00 751 1

原创 Unregistering application CLIENT with eureka with status DOWN

Eureka Server启动之后,client启动的时候报错“Unregistering application CLIENT with eureka with status DOWN”。检查配置文件,发现并无问题:eureka: client: service-url: defaultZone: http://localhost:8761/eureka/sprin...

2019-08-04 17:56:04 1997 3

原创 深入理解synchronized实现原理

在多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这种资源可能是对象、变量、文件等。由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问。于是,JVM内置锁synchronized登上了舞台。 如何使用synchronized既可以同步方法(同步实例方法、类方法),也可以同步代码块。//同步实例方法:public synchronized vo...

2019-08-03 17:09:31 230 1

原创 简单理解Spring IoC

IoC(Inverse of Control),控制反转,简单的解释:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中。来一个超简单的例子加以说明:(1)首先导入jar包:四个核心(be...

2019-07-29 21:52:09 106 1

原创 Sprig简介

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应...

2019-07-29 21:38:12 510 2

原创 线程的生命周期------运行和阻塞

当线程被创建并启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)这5中状态。上一篇已经介绍新建和就绪状态了,这篇接着介绍运行和阻塞状态。 运行(Running)处于就绪状态的线程获得CPU,开始执行run()方法的线程执行体,则该线程处于运行状态...

2019-07-29 21:13:37 122 3

原创 线程的生命周期------新建和就绪

当线程被创建并启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)这5中状态。 Let's start当程序使用new关键字创建一个线程之后,这个线程就处于新建状态,此时Java虚拟机为其分配内存,并初始化其成员变量的值。此时的线程对象没有表现出任何...

2019-07-29 20:37:32 71 2

原创 线程创建------使用Callable和Future

Start 从Java5开始,Java提供了Callable接口(也是函数式接口),该接口提供了一个call()方法可以作为线程执行体,相较于run()方法,call()方法功能更强大:(1)call()方法可以有返回值。(2)call()方法可以声明抛出异常。由于Callable接口是Java5新增的接口,而且它不是Runnable接口的子接口,所以就不能作为Thread的targe...

2019-07-29 20:09:25 96

原创 线程创建------实现Runnable接口

步骤通过实现Runnable接口创建并启动线程的步骤:(1)定义Runnable接口的实现类,并重写该类的run()方法,该run()方法的方法体就是线程执行体。(2)创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。(可以在创建Thread对象时为该Thread对象指定一个名字) (3)调用线程对象...

2019-07-29 19:07:07 442

原创 线程创建------通过继承Thread类

步骤通过继承Thread类创建并启动线程的步骤:(1)定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。(2)创建Thread子类的实例,即创建线程对象。 (3)调用线程对象的start()方法来启动该线程。 代码实例 代码实现如下:![在这里插入代码片](https://img-blo...

2019-07-29 17:42:13 357

原创 Win10鼠标点一下文件夹或文件没有选中的那个蓝色,但还是能正常用,比如双击跟右键,点一下也有详细信息

Win10系统,小新今天出了一点小问题,鼠标点一下文件夹或文件(或者鼠标移上去)没有选中的那个蓝色,但还是能正常用,比如双击和右键,点一下也有详细信息。就是下图的背景色没有了,倒也不是大问题,只是不习惯。解决方法打开"任务管理器",找到"Windows资源管理器",我们发现有时候会出现不止一个。有的人会发现只有一个,如果出现两个"Windows资源管理器"的情况,就把打开的所有文件夹(资源...

2019-07-12 21:43:05 4666 2

原创 【Java】归并排序

归并排序是另一类不同的排序方法,这种方法是运用分治法解决问题的典型范例。基本思想归并排序的基本思想是基于合并操作,即合并两个已经有序的序列是容易的,不论这两个序列是顺序存储还是链式存储,合并操作都可以在 Ο(m+n)时间内完成(假设两个有序表的长度分别为 m 和 n)。排序过程 归并排序的过程为:1. 划分:将待排序的序列划分为大小相等(或大致相等)的两个子序列;2. 治理:当子序列...

2019-07-06 15:47:26 72 1

原创 【Java】简单选择排序

简单选择排序属于选择类排序方法,它的改进是堆排序。基本思想简单选择排序的基本思想非常简单(假设从小到大排序):第一趟,从 n 个元素中找出关键字最小的元素与第一个元素交换;第二趟,在从第二个元素开始的 n-1 个元素中再选出关键字最小的元素与第二个元素交换;如此,第 k 趟,则从第 k 个元素开始的 n-k+1 个元素中选出关键字最小的元素与第 k 个元素交换,直到整个序列按关键字有序。排序...

2019-07-06 15:23:34 309 1

原创 【Java】希尔排序

希尔排序又称为“缩小增量排序”,它属于插入类排序方法,是对直接插入排序的改进。基本思想首先将待排序的元素分为多个子序列,使得每个子序列的元素个数相对较少,对各个子序列分别进行直接插入排序,待整个待排序序列“基本有序”后,再对所有元素进行一次直接插入排序。 排序过程 小结...

2019-07-06 15:11:54 291 1

原创 【Java】堆排序代码实现

堆排序是简单选择排序的改进,我们先来简单介绍一个概念:堆。堆的定义:n个元素的序列{k1 , k2 , … , kn},当且仅当满足下列关系时,称之为堆。满足条件1,则称之为小顶堆;满足条件2,则称之为大顶堆。堆排序要解决两个问题:(1)将n个元素的序列按关键字建成堆;(2)输出堆顶元素后,堆的调整。堆排序代码实现如下:import java.util.Arra...

2019-06-28 15:29:29 299 4

原创 【Java】折半插入排序实现

折半插入排序是插入类排序的其中一种,上一篇介绍的直接插入排序算法简便、容易实现,当待排序元素的数量n很小时,这是一种较好的排序方法。但是通常待排序元素数量 n 很大,则不宜采用直接插入排序方法,此时需要对直接插入排序进行改进。直接插入排序的基本操作是向有序序列中插入一个元素,插入位置的确定是通过对有序序列中元素按关键字逐个比较得到的。既然是在有序序列中确定插入位置,则可以不断二分有序序列来确定...

2019-06-26 08:25:56 408 4

原创 【Java】直接插入排序实现

插入类排序主要有三种排序方法:直接插入排序、折半插入排序和希尔排序。本次简要介绍直接插入排序的实现。直接插入排序的基本思想:仅有一个元素的序列总是有序的,因此,对 n 个记录的序列,可从第二个元素开始直到第 n 个元素,逐个向有序序列中执行插入操作,从而得到 n 个元素按关键字有序的序列。一般来说,在含有 j-1 个元素的有序序列中插入一个元素的方法是:从第 j-1 个元素开始依次向前...

2019-06-25 14:05:58 166 5

原创 【Java】快速排序实现

交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。在这类排序方法中最常见的是冒泡排序和快速排序。上一篇简单写了冒泡排序,这次简单写一写快速排序。快速排序的思想:快速排序是将分治法运用到排序问题中的一个典型例子,其基本思想是:通过一个枢轴(pivot)元素将 n 个元素的序列分为左、右两个子序列 Ll 和 Lr,其中子序列 Ll中的元素均比枢轴元素小,而子序列...

2019-06-24 20:53:03 2483 2

原创 【Java】冒泡排序实现

交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。在这类排序方法中最常见的是冒泡排序和快速排序。简单写一写冒泡排序。冒泡排序的思想首先,将 n 个元素中的第一个元素和第二个元素进行比较,如果两个元素的位置为逆序,则交换两个元素的位置;进而比较第二个和第三个元素关键字,如此类推,直到比较第 n-1 个元素和第 n 个元素为止;上述过程描述了冒泡排序的第一趟排序...

2019-06-24 19:57:42 154

原创 js对数字数组排序

js中经常需要用到对数组进行排序的操作,当数组中的元素均为数字时,直接使用sort()进行排序得到的结果可能不是你想要的结果。假如我有数组arrayNums=[15,2,16],直接使用arrayNums.sort()的排序结果将是[15,16,2],这是因为Javascript 的sort()函数在默认情况下是按照字符串顺序对值进行排序的。正因如此,sort()方法在对数值排序时会产生...

2019-06-21 10:59:25 2184

原创 SQL行转列的实现

将列值旋转成列名(即行转列)是我们在开发中经常会遇到的一个需要,下面就介绍三种实现思路。假设我有表tb_score且表中数据如下图:行转列之后的效果如下图:方式一:使用静态SQLselect user_name 姓名,sum(case course when '语文' then score else 0 end) 语文,sum(case course when '数学...

2019-06-19 16:43:34 1785 6

原创 String、StringBuffer、StringBuilder

这是一个非常基础的内容,现在这里简单总结一下。String:

2019-06-16 21:35:51 71

原创 Java中的&&与&、||与|

逻辑运算符用于操作两个布尔类型的变量或常量。逻辑运算符主要有6个:&&(与)、&(不短路与)、||(或)、|(不短路或)、!(非)、^(异或)此文主要讲&&与&、||与|的区别。&&与&&&:与,前后两个操作数必须都为true才返回true,否则返回false。它是先计算左边的操作数,如果左边的操作...

2019-06-07 11:45:33 6602 3

空空如也

L-Joy的留言板

发表于 2020-01-02 最后回复 2020-01-02

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