![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVASE
文章平均质量分 90
JinziH Never Give Up
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
从JDK8源码中看ArrayList和LinkedList的区别
ArrayList和LinkedList的区别是面试中经常会被问到的一点,但是如果只看八股文去背诵着两者的区别,就不会有深刻的认识。本篇文章从数据结构以及JDK8源码的角度来分析这两者的区别,希望给读者带来更多的思考。在看ArrayList和LinkedList的区别之前我们先来看一下数据结构的相关知识。线性表是最常用的一种数据结构,简单来说线性表是n个数据元素的有限序列。线性表有两种实现方式,一种是顺序实现,一种是链式实现。顺序实现是用一组地址连续的存储单元依次存储线性表的数据元素。链式实现用一组任原创 2022-08-07 16:05:01 · 325 阅读 · 0 评论 -
JDK8中HashMap底层源码解析-treeifyBin和splite方法
本篇文章接着来解析JDK8中HashMap的底层源码treeifyBin和splite方法。其中,treeifyBin和链表转红黑树有关,splite和扩容时红黑树的转移有关。本篇文章解析了treeifyBin和splite方法,如果链表长度大于8且数组长度大于64,先把链表改造为双向链表,并且把节点类型改为TreeNode,在调用treeify()方法改造成红黑树。httpshttpshttpshttps。...原创 2022-07-27 16:11:41 · 938 阅读 · 0 评论 -
JDK8中HashMap底层源码解析-resize方法
上一篇文章已经解析过JDK8中HashMap的put和putVal底层源码,这篇文章顺着上一篇文章的节奏,来解析一下另外一个非常重要的方法resize方法。本章主要解析了JDK8中HashMap的resize方法的底层源码,这个方法主要有两个作用,一是用来初始化数组,二是用来扩容,而扩容的时候就需要转移元素,转移元素又分为四种情况。同时在转移红黑树的时候还提到了一个方法split()方法,在以后的文章中将会解析到。httpshttps。...原创 2022-07-27 14:17:10 · 522 阅读 · 0 评论 -
JDK8中HashMap底层源码解析-put和putVal方法以及数组下标的计算方式
我想只要JAVA程序员,都躲不过HashMap这一关,面试官的HashMap夺命连环问经常把求职者虐的体无完肤。因此,本篇文章以JDK8为例,对HashMap的底层源码做一个解析,帮助大家更好的理解HashMap的底层原理。刚开始阅读HashMap底层源码时可以会感到困惑,但只要理清楚逻辑多看几遍,就会对HashMap有一个更清晰的认识。在以后的文章中还将解析其他的HashMap方法源码,供大家参考学习。httpshttps。.........原创 2022-07-26 13:33:45 · 752 阅读 · 0 评论 -
被JAVA内存模型绕晕了?看来看这一篇
网上有很多关于JAVA内存模型的文章,但大多只讲解了JAVA内存模型本身的概念,很少提到JAVA内存模型出现的原因是什么,导致看完之后自己的思维更加混乱。本文简单介绍为什么要有内存模型以及JAVA内存模型的基本概念供参考学习。我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存。刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以原创 2022-06-26 21:31:10 · 235 阅读 · 0 评论 -
你真的知道String不可变的原因吗?答案在这
以往我们对String不可变的认识大多都停留在内部有一个final修饰的数组,但是这个说法不太严谨,这篇文章来揭示一下String到底为什么不可变。String 不可变的表现就是当我们试图对一个已有的对象 “abcd” 赋值为 “abcde”,String 会新创建一个对象。从下图我们看出str的哈希值发生了变化,即str指向了其他的地址。即原来的"abcd"没有发生变化,这就是String不可变的体现。为什么String不可变呢?下面给出一种通用的答案。String内部用 final 修饰原创 2022-06-10 20:33:11 · 3231 阅读 · 8 评论 -
尝试以更高的角度去理解反射机制
在之前的文章中已经介绍了反射的基本内容以及基本的API,本章主要以更高的角度去理解反射机制,去理解反射机制在各大框架中的应用场景。Java可以给我们在运行时获取类的信息,这就是反射。类加载完之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。Class类是反射的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Clas原创 2022-06-03 11:19:39 · 124 阅读 · 0 评论 -
不知道JAVA多态哪里用过?多态的应用场景
多态是JAVA的三大特性之一,多态在JAVA中也有广泛的应用,本文简单介绍了JAVA中几种多态的应用场景供大家学习。本文简单的介绍了多态的几种应用场景,包括常用类的方法、HttpServletRequest的实现以及数据库驱动接口。接口与多态密切相关,由于接口可以有多个不同的实现类所以常常表现出多态性。...原创 2022-02-04 16:21:47 · 4094 阅读 · 0 评论 -
理解JAVA泛型,看这一篇
文章目录前言一、为什么使用泛型?二、泛型标记三、泛型使用3.1泛型方法3.2泛型类3.3泛型接口四、对泛型上限的限定五、对泛型下限的限定六、类型擦除总结前言在JAVASE的集合章节已经简单介绍了泛型的概念以及基本使用,本章将继续讲解有关泛型的内容,包括泛型上下限的限定以及类型擦除等内容。一、为什么使用泛型?在不使用泛型的情况下我们可以通过引用Object类型来实现参数的任意化,因为Object是所有类的父类。但是我们仔细想想这样做的话有什么后果?具体使用时需要进行强制类型转换(父类转成子类)原创 2022-02-02 15:38:51 · 835 阅读 · 0 评论 -
理解sleep()和wait()
文章目录前言一、sleep()二、wait()三、sleep()和wait()的区别总结前言sleep方法和wait方法是两个非常容易混淆的概念,也是经常会被问到的一个问题。本文介绍了两个方法各自的特点以及两个方法之间的区别,有助于我们理解并且区分。一、sleep()sleep()方法是Thread类里面的方法,调用该方法会导致当前线程休眠下面以一个案例来讲解sleep方法的具体使用场景package com.ffyc.thread.day1;public class Example原创 2022-01-20 12:03:06 · 2170 阅读 · 0 评论 -
理解hashCode()和equals()
文章目录前言一、Object里的方法二、HashSet对象存储过程三、覆盖equals和hashCode方法3.1为什么覆盖equals方法3.2为什么覆盖equals方法时总要覆盖hashCode方法?四、自定义类重写hashCode()和equals()方法总结前言如果你经常使用HashMap、HashSet,你无法避免重写equals和hashCode方法这个问题。本文介绍了Object类里面的equals和hashCode方法、以及为什么要重写这两个方法,如何去重写这两个方法,学习这些可以帮助原创 2022-01-19 21:58:08 · 255 阅读 · 0 评论 -
还在写循环?试试用Stream流简化你的开发
文章目录前言一、Stream流概述二、创建Stream流对象三、Stream流常用的方法总结前言在讲解Lambda表达式时,就介绍了Lambda表达式可以简化集合和数组的遍历、过滤和提取等操作。JDK8中新增了一个Stream接口,该接口可以将集合、数组中的元素转换成Stream流的形式,并结合Lambda表达式的优势进一步简化集合、数组中的元素的查找、过滤、和转换等操作,这一操作就是聚合操作。一、Stream流概述Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以原创 2022-01-19 18:48:57 · 527 阅读 · 0 评论 -
这么好用的Lambda表达式,你确定不用吗?
文章目录前言一、Lambda 出现的背景二、Lambda 概述三、函数式接口四、Lambda 示例总结前言Lambda 表达式是JDK8中一个重要的特性,它使用一个清晰简洁的表达式来表达一个接口,同时Lambda表示式也简化了对集合以及数组数据的遍历、过滤和提取等操作。一、Lambda 出现的背景回想一下在java8之前,我们要将某些功能传递给某个方法,要怎么做?比如我们现在要实现对一个数组元素的降序排序,有以下几种做法1.单独写一个类实现Comparator接口public class原创 2022-01-13 22:15:38 · 325 阅读 · 0 评论 -
JAVASE多人聊天室项目实战
文章目录前言一、服务器端1.启动服务器端,打开服务器端窗口2.创建ServerSocket,循环监听客户端连接3.存储连接到服务器端的多个Socket(集合)4.接收客户端发送的信息(多线程)5.将接收到的消息转发给所有的客户端socket二、客户端1.登录和注册界面2.信息认证(数据库)3.创建客户端Socket连接服务器4.聊天界面5.发送聊天信息6.接收服务器的信息(线程)三、项目效果总结前言在之前的学习中,我们已经学完了JAVASE的基本内容:基础语法、面向对象、异常、常用类、集合、线程、G.原创 2021-08-18 21:42:31 · 1627 阅读 · 5 评论 -
JAVASE第十一章(JDBC)
文章目录前言一、JDBC概述二、JDBC搭建三、编写程序1.注册JDBC驱动程序2.建立与数据库连接3.获得Satement执行sql语句4.获得PrepareStatement执行sql语句5.关闭与数据库的链接通道四、PreparedStatement和Statement五、结果集处理总结前言在实际开发时,项目中的数据通常是存储在数据库中的,要想使用其中的数据,就必须编写程序连接到数据库对数据进行操作。Java对数据库的操作提供了相应的支持,它可以提供了一套可以执行SQL语句的API,即JDBC。原创 2021-08-17 21:41:43 · 275 阅读 · 0 评论 -
JAVASE第十章(线程)
文章目录前言一、程序 线程 进程1.1基本概念1.2线程和进程的关系二、线程2.1 创建线程2.1.1继承Thread类的方式2.1.2实现Runnable的方式2.1.3两种方式的区别2.2 Thread类中方法2.3 线程优先级三、线程状态3.1线程的状态3.2 线程的分类四、多线程的概念4.1什么是多线程4.2线程同步4.2.1并发与并行4.2.2多线程同步模拟卖票4.2.2.1继承Thread和实现4.2.2.2实现Runnable五、Lock(锁)5.1Lock(锁)5.2线程死锁5.3Reen.原创 2021-06-29 20:44:30 · 266 阅读 · 0 评论 -
JAVASE第九章(网络)
文章目录前言一、网络编程概述二、通讯要素:IP和端口号三、InetAddress类四、通讯要素:网络通信协议五、Socket六、UDP总结前言一、网络编程概述二、通讯要素:IP和端口号三、InetAddress类四、通讯要素:网络通信协议五、Socket六、UDP总结......原创 2021-06-28 19:49:24 · 199 阅读 · 1 评论 -
JAVASE第八章(IO流)
文章目录前言一、File类二、输入及输出的概念三、输入流与输出流四、字节流与字符流五、输入输出节点字节流六、节点流与处理流七、输入输出节点字符流八、Print流九、对象输入输出流总结前言一、File类File类是java.io包中很重要的一个类;1. File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代 表一个文件或目录;2. File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件 大小等;3. File对象无法操作文件的具体数据,即不能直接对.原创 2021-06-27 20:55:38 · 279 阅读 · 0 评论 -
JAVASE第七章(集合)
本文主要介绍了集合的基本概念以及各种集合接口和它的实现类,重点是集合内部的数据结构,理解这些结构对我们在选择哪种集合作为容器有很大的帮助。为什么要引入泛型:为什么会有泛型呢? 早期的Object类型可以接收任意的对象类型,但是在实际的使用中, 会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决 这个安全问题。1.泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后 调用此方法时传递实参。2.参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数, 此时类型原创 2021-06-26 15:46:03 · 236 阅读 · 0 评论 -
JAVASE第六章(异常)
文章目录前言一、Java异常概念二、异常的体系三、异常处理四、throws和throw五、自定义异常前言一、Java异常概念1.程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。JAVA提供了更加优秀的解决办法:异常处理机制。2.异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。3.Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出原创 2021-06-04 20:36:26 · 305 阅读 · 0 评论 -
JAVASE第五章(API)
文章目录前言一、Java API概述二、基本数据类型包装类1.什么是包装类2.包装类的用途3.装箱和拆箱Auto-boxing/unboxing三、Object类1.什么是Object类2.toString方法3.equals方法四、Arrays类1.sort排序2.binarySearch -使用二分搜索算法搜索指定数组3.copyOf方法五、String类1.String类概述总结前言一、Java API概述API(Application Programming Interface)应用程序原创 2021-05-26 20:41:43 · 427 阅读 · 0 评论 -
JAVASE第四章(面向对象下)
文章目录前言一、 面向对象特征--继承1.什么是继承2.什么时候使用继承3.如何使用继承4.继承中的构造方法5.super关键字6.方法的重写7. 继承的代码部分8.抽象方法和抽象类1.抽象方法2.抽象类3.抽象方法和抽象类的层面4.抽象类和抽象方法的代码部分二、面向对象特征--多态1.什么是多态2.多态的三种调用3.方法参数的多态性4.多态的转型1.向上转型2.向下转型5.多态的代码部分三、final关键字前言一、 面向对象特征–继承1.什么是继承继承:继承是面向对象程序设计不可缺少的设计思原创 2021-05-11 20:06:16 · 284 阅读 · 0 评论 -
JAVASE第四章(面向对象中)
文章目录前言一、对象与引用1.对象的创建2.基本类型和引用类型的区别3.值传递与引用传递二、static关键字三、代码块1.实例块2.静态块四、包五、访问权限修饰符六、面向对象特征--封装七、this关键字总结前言封装是实现面向对象的基础,深入的理解封装的特性,有利于我们能更好的领悟面向对象的思想以及实现面向对象编程。一、对象与引用1.对象的创建• Java 语言中除基本类型之外的变量类型都称之为引用类型。• Java中的对象是通过引用对其操作的例如: 我们有一个自定义类为Car(汽车类原创 2021-05-02 14:10:06 · 269 阅读 · 0 评论 -
JAVASE第四章(面向对象上)
文章目录前言一、面向过程和面向对象的设计思想二、JAVA类1.什么是类?2.类的结构三、JAVA对象四、JAVA对象总结前言一、面向过程和面向对象的设计思想1.面向过程:procedure oriented programming 缩写 POP分析出解决问题所需要的步骤,然后把步骤一步一步实现。面向过程直接关注流程。2.面向对象:object oriented programming 缩写 OOP面向对象的编程语言以分类的方式进行思考和解决问题。面向对象先对整体关系作出分类,然后根据不原创 2021-04-24 20:30:10 · 277 阅读 · 0 评论 -
JAVASE第三章(数组)
文章目录前言一、数组的基本概念及作用二、数组的创建1.数组的声明的两种方式2.数组创建的三种方式3.静态数组和动态数组三、数组的访问与迭代1.数组迭代的两种方式四、数组排序1.冒泡排序五、习题前言数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。一、数组的基本概念及作用• 1.数组是相同数据类型元素的集合• 2.数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类原创 2021-04-08 22:05:42 · 255 阅读 · 3 评论 -
JAVASE第二章(基础)
文章目录前言一、IDE使用二、注释三、关键字四、保留字五、标识符六、JAVA变量六、基本数据类型七、基本数据类型转换前言本文章是JavaSE的基础语法部分,属于Java入门起步课程,对于后续Java的高级概念的学习有非常重要的影响。涉及到的内容有:变量与常量,标识符,关键字,运算符,Java的数据类型,条件分支语句,循环语句,跳转语句等.一、IDE使用IDE(Integrated Development Environment )集成开发环境,是用于提供程序开发环境的应用程序,一般包括代码编原创 2021-03-30 20:27:29 · 1094 阅读 · 11 评论 -
JAVASE第一章(概述)
JAVASE第一章文章目录前言一、为什么学习java二、Java语言发展史三、Java语言的特点1、跨平台性2、开源(开放源代码,免费)四、Java语言体系结构1、JavaSE2、JavaEE3、JavaME五、Java语言的运行机制六、Java运行环境的安装与配置七、.开发第一个java程序前言Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言原创 2021-03-16 23:35:17 · 1986 阅读 · 19 评论