草庐IT

HashMap(JDK8)源码分析

get逻辑:HashMap数据结构为数组加链表加红黑树、只有当链表数量大于8时、才将链表转换为红黑树、时间复杂度由链表的O(N)转换为红黑树的O(logN)//主要看getNode下的方法、传入key的hash值和keypublicVget(Objectkey){Nodee;return(e=getNode(hash(key),key))==null?null:e.value;}//返回一个Node对象、包含了key和value、在get方法中在返回value值finalNodegetNode(inthash,Objectkey){//tab:Node对象数组Node[]tab;//first

HashMap(JDK8)源码分析

get逻辑:HashMap数据结构为数组加链表加红黑树、只有当链表数量大于8时、才将链表转换为红黑树、时间复杂度由链表的O(N)转换为红黑树的O(logN)//主要看getNode下的方法、传入key的hash值和keypublicVget(Objectkey){Nodee;return(e=getNode(hash(key),key))==null?null:e.value;}//返回一个Node对象、包含了key和value、在get方法中在返回value值finalNodegetNode(inthash,Objectkey){//tab:Node对象数组Node[]tab;//first

从new File("")到jdk源码

1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件

从new File("")到jdk源码

1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件

Java JDK Proxy和CGLib动态代理示例讲解

简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf

Java JDK Proxy和CGLib动态代理示例讲解

简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf

HashMap源码分析 (基于JDK1.8)

HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li

HashMap源码分析 (基于JDK1.8)

HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li

【原创】JDK 9-17新功能30分钟详解-语法篇-var

JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA

【原创】JDK 9-17新功能30分钟详解-语法篇-var

JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA