
Java基础
文章平均质量分 91
java基础类的博客
FYHannnnnn
知道的越多,不知道的也就越多
展开
-
ConcurrentHashMap源码分析(1.8)
0、说明 1、ConcurrentHashMap跟HashMap,HashTable的对比2、ConcurrentHashMap原理概览3、ConcurrentHashMap几个重要概念4、ConcurrentHashMap几个重要方法5、ConcurrentHashMap的初始化6、ConcurrentHashMap的put操作详解7、ConcurrentHashMap的扩容详解8、ConcurrentHashMap的get操作详解9、Con...转载 2022-01-18 11:09:54 · 1808 阅读 · 0 评论 -
【问题解决】使用YYYY-MM-dd时间转换问题
测试逻辑:创建两个日期格式化,一个是出问题的YYYY-MM-dd,另一个是正确用法yyyy-MM-dd 分别去格式化两个不同的日期:2020年12月26日(周六),2020年12月27日(周日)具体代码如下:public class Tests { @Test public void test() throws Exception { SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd");转载 2020-12-31 10:33:31 · 931 阅读 · 1 评论 -
JDK动态代理的实现
一.aop思想与面向切面编程: 首先来看几张图片:二.面向接口的JDK动态代理 1.创建一个接口和实现类impl: 2.创建一个代理类,实现InvocationHandler接口 类中的原则: 通过private Object target创建真实主题(目标对象)属...原创 2018-07-26 14:19:49 · 385 阅读 · 0 评论 -
整合Java-线程池(整合了很多线程池的资料结合一些面试题目)
一,什么是线程池: java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中...原创 2018-07-27 21:11:17 · 228 阅读 · 0 评论 -
整合Java-反射机制
一,什么是Java反射机制百度:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制优快云:在程序运行的时候动态装载类,查看类的信息,生成对象,或操作生成对象。类在运行的时候,可以得到该类的信息,并且 可以动态的修改这些信息,自己能看到自己,跟...原创 2018-07-28 09:36:25 · 276 阅读 · 0 评论 -
Javadoc 使用详解
该文转载自:https://blog.youkuaiyun.com/vbirdbest/article/details/80296136#comments一:简介Javadoc用于描述类或者方法的作用。Javadoc可以写在类上面和方法上面。https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html二...转载 2019-02-20 09:27:06 · 324 阅读 · 0 评论 -
深入理解Java中的迭代器
文章转载:https://www.cnblogs.com/zyuze/p/7726582.html迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。概述 Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护...转载 2019-03-22 10:06:24 · 198 阅读 · 0 评论 -
Java Generator
1、什么是Java GeneratorJava中这样理解:将泛型应用于接口,接口必须有返回类型为泛型T的next()方法,是一种专门负责创建对象的类。在很多设计模式都会用到(比如工厂方法模式),类似于Iterable对象中使用使用next()不断获得下一个值,这里泛型接口中的next()方法返回创建对象。2、实现一个CommonGenerator通用生成器 实现一个通用生成器,通过n...转载 2019-03-28 17:10:58 · 663 阅读 · 0 评论 -
Java 元祖Tuple
一,元组的定义:看了很多博客关于这方面的定义,个人觉得元组的使用就是通过泛型定义一个类,然后去保存多个类型属性。所以可以认为元组完全是基于泛型的。在使用元组的时候,我看到一个例子关于分页时,sql语句之后得到存储的数据,当前页,每页的大小,总共页数,问题来了,其实你已经查出来了总条数,但是因为你的返回内容是一个对象无法再多返回一个list类型了,你需要重新写一个方法来再查一次返回一个Lis...原创 2019-03-29 11:20:51 · 1709 阅读 · 0 评论 -
java中Comparable与Comparator的区别
文章转载:https://www.cnblogs.com/xujian2014/p/5215082.html一、Comparable简介 Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。此外,实现此接口的对象可...转载 2019-03-29 16:39:12 · 155 阅读 · 0 评论 -
泛型的擦除
一,擦除的理解对于Java中泛型的擦除,可以直接使用反射,通过代码来测试。关于反射反射的理解。 通过反射我们可以直接过去一个类中所有的属性(无论权限)与该类的所有信息。先来看一段代码:这段代码的输出结果后来为true。从这段代码中就可以看出泛型的擦除,不论<>中是填写的什么类型,或者类对象,在编译期时无论Integer还是String都会被擦除变成Object类型,这就...原创 2019-05-07 16:38:21 · 339 阅读 · 0 评论 -
深入剖析Java中的装箱和拆箱
一、关于拆箱和装箱装箱 就是自动将基本数据类型转换为包装器类型;拆箱 就是自动将包装器类型转换为基本数据类型基本数据类型 包装器类型 int(4子节) Integer byte(1子节) Byte short(2子节) Short long(8子节) Long float(4子节) Float double(8子节) Dou...转载 2019-08-22 17:00:27 · 142 阅读 · 0 评论 -
HashMap的扩容机制---resize()
HashMap的扩容机制---resize()什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值(知道这个阈字怎么念吗?不念fa值,念yu值四声)---即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我转载 2020-05-26 20:00:47 · 510 阅读 · 0 评论 -
ArrayList和Vector的区别,与LinkedList各自的存储性能与特性
Vector和ArrayList这两个集合类的本质并没有太大的不同,它们都实现了List接口,而且底层都是基于Java数组来存储集合元素。 在ArrayList集合类的源代码中可以看到如下一行。//采用elementData数组来保存集合元素private transient Object[] elementData;在Vector集合类的源代码中也可看到类似的一行。//采用elementData数组来保存集合元素protected Object[] elementData;从上面代码可..转载 2020-07-17 16:07:02 · 279 阅读 · 0 评论 -
Collection集合操作,fail-fast 与 fail-safe的区别
原文地址:http://javahungry.blogspot.com/2014/04/fail-fast-iterator-vs-fail-safe-iterator-difference-with-example-in-java.html在我们详细讨论这两种机制的区别之前,首先得先了解并发修改。1.什么是同步修改?当一个或多个线程正在遍历一个集合Collection,此时另一个线程修改了这个集合的内容(添加,删除或者修改)。这就是并发修改2.什么是 fail-fast 机制?fail转载 2020-07-19 17:27:21 · 235 阅读 · 0 评论 -
JDK.7 JDK.8 Map中hash()源码理解
你知道HashMap中hash方法的具体实现吗?你知道HashTable、ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8中hash方法实现的不同以及区别吗?如果你不能很好的回答这些问题,那么你需要好好看看这篇文章。文中涉及到大量代码和计算机底层原理知识。绝对的干货满满。整个互联网,把hash()分析的如此透...转载 2020-07-19 18:19:17 · 234 阅读 · 0 评论 -
JDK8 HashMap源码解析
1.概述本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap 是非线程安全类,在多线程环境下可能会存在问题。在本篇文章中,我将会对 HashMap 中常用方法、重要属性及相关方法进行分析。需要转载 2020-07-21 15:09:30 · 434 阅读 · 0 评论 -
List、Map、Set三个接口,存取元素时特点
Set里面不允许有重复的元素,存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。取元素:没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。List表示有先后顺序的集合,存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(intindex..转载 2020-07-21 16:04:10 · 183 阅读 · 0 评论 -
Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 == 还是 equals()? 它们有何区别?
Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。equals()和==的区别==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本...转载 2020-07-21 16:44:27 · 1085 阅读 · 0 评论 -
集合类框架及基本接口 ---Java
集合即存储对象的容器。在程序中有可能无法预知需要多少对象。数组虽然也可以存储对象,但长度是固定的,不好定义。但集合类容器的长度可变。每一个容器对数据的存储方式(数据的存储结构)都有不同,所以有不同的集合类。集合类框架(Java Collection Framework)在java中有一套设计优良的接口和类组成了Java集合框架,通过集合可以方便地操作成批的数据或对象元素。所有的Java集合都在java.util包中。Collection集合类Map集合集合类框架的基本接口从转载 2020-07-24 10:47:03 · 400 阅读 · 0 评论 -
HashSet 和 TreeSet 区别 、 HashSet的底层
HashSetHashSet是依靠hash table实现的(内部实现实际上是一个HashMap)。 不保证顺序(hash无法保证顺序)。 允许null值。 因为其实现借助于hash表,所以两个元素,e1.equals(e2),必须也要保证e1.hashCode() == e2.hashCode()LinkedHashSetLinkedHashSet继承自HashSet,不过和HashSet不同的是,它是借助于LinkedHashMap实现的(LinkedHashMap其实也继承自HashMa.原创 2020-07-24 15:55:30 · 399 阅读 · 0 评论 -
LinkedHashMap实现原理 JDK8版本源码解读
1. 概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。所以,要看懂 LinkedHashMap 的源码,需要先看懂 HashMap 的源码。2. 原理LinkedH.转载 2020-07-27 16:50:58 · 297 阅读 · 0 评论 -
浅谈为什么集合类没有实现 Cloneable 和 Serializable 接口
看了很多其它的博客,对于这么问题有很多不同的理解,这是一道牛客网上的面试题,解释是如下的:什么是克隆,克隆怎么使用,我之前的设计模式(原型设计模式)博客中有介绍到怎么使用原型设计模式。序列化的作用也正如上面提到的为了网络传输,方便数据移植,原理上序列化的集合是可以通过网络传输到其它的机器上新建的新的集合对象中去的但是之前我转载的那篇HashMap中有说到为什么HashMap没有默认的去实现序列化,因为HashCode是受机器环境影响的,并不能如同原理上所谓的跨机器直接使用。所以也应证了上面所说的.原创 2020-07-27 17:14:32 · 415 阅读 · 0 评论 -
Iterator,ListIterator的区别
一,什么是迭代器迭代器是一种Collection 集合遍历的接口,而实现该接口的类被称之为迭代类。二,ListIterator源码上ListIterator继承了Iterator,JDK8的源码中这样说道:An iterator for lists that allows the programmer ....,这是一个提供给我们专门遍历List集合的迭代接口。public interface ListIterator<E> extends Iterator<E>原创 2020-07-28 23:06:51 · 256 阅读 · 0 评论 -
数组(Array)和列表(ArrayList)区别
下面列出了Array和ArrayList的不同点:Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。Array大小是固定的,ArrayList的大小是动态变化的。ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。ArrayList可以算是Array的加强版,(对array有所取舍的加强)。转载 2020-07-29 17:34:34 · 278 阅读 · 0 评论 -
Java 集合类框架实践
转载 2020-07-29 17:38:34 · 162 阅读 · 0 评论 -
Java Collection & Collections 区别
一,CollectionCollection是一个Util 集合接口,自身继承了迭代类Iterator,提供了一系列的集合操作方法。对List,Set提供统一化的操作。public interface Collection<E> extends Iterable<E> { // Query Operations....Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack...原创 2020-07-30 10:05:34 · 211 阅读 · 0 评论 -
什么是元数据
元数据是指用来描述数据的数据,更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。在一些技术框架,如struts、EJB、hibernate就不知不觉用到了元数据。对struts来说,元数据指的是struts-config.xml;对EJB来说,就是ejb-jar.xml和厂商自定义的xml文件;对hibernate来说就是hbm文件。以上阐述的几种元数据都是基于xml文件的或者其他形式的单独配置文件。这样表示有些不便之处。一、与被描述的文件分离,不利于一致性的维护;第二、转载 2020-08-06 09:36:54 · 1058 阅读 · 0 评论 -
如何理解BIO、NIO、AIO的区别?
Java中的IO原理首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。那内核是如何进行IO交互的呢?网卡收到经过网线传来的网络数据,并将网络数据写到内存中。 当网卡把数据写入到内存后,网卡向cpu发出一个中断信号,操作系统便能得知有新数据到来,再通过网卡中断程序去处理数据。 将内存中的网络数据写入到对应socket的接收缓冲区中。 当接收缓冲区的数据写好之后,应用程序开始进行数据处理。对应抽象到jav转载 2020-08-07 10:42:11 · 269 阅读 · 0 评论 -
NIO的组成详解
一、NIO简介Java NIO,通常称为 New IO 或 No Block IO, 是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。注:JDK1.4的版本为 NIO 1.0, 而JDK7的版本为 NIO 2.0二、NIO与传统IO的区别1.传统IO是面向流的,NIO是面向缓冲区的。 单线程只能有一个客户端,虽然用线程池可以有多个客户端连接,转载 2020-08-07 11:00:10 · 624 阅读 · 0 评论