![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
墨玉浮白
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap源码分析(1)——JDK1.7的实现
ConcurrentHashMap源码分析前言ConcurrentHashMap是线程安全且高效的HashMap的实现,在并发编程的情景下使用的非常广泛。它是怎么来的呢?先抛个HashMap!通过对HashMap的分析,我们知道当插入的元素超过临界值就会触发HashMap的扩容机制(也就是rehash,重新计算元素位置,将其都扔进新容器中)。在多线程的场景下,可能会造成闭环链表,进而导致g...原创 2019-04-04 17:10:07 · 857 阅读 · 0 评论 -
Java8新特性学习记录
前言转载 2019-04-22 15:39:58 · 226 阅读 · 0 评论 -
Java基础之泛型
前言学习泛型之前,要先了解“语法糖”。语法糖是指在计算机语言中添加某种语法,对语言的功能无影响,但是更方便程序员的使用。Java最常见的语法糖包括:泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,在编译阶段就被还原为了基础语法结构,这个过程叫做解语法糖。引入泛型的目的通过泛型的引入,使得在编译阶段完成一些类型转换工作,避免在运行时因为强制类型转换出现ClassCast...原创 2019-04-18 13:04:55 · 117 阅读 · 0 评论 -
Java基础之反射
一、概述在运行状态中,对于任何一个类都能知道这个类中的所有属性、方法;对于任意一个对象,都能调用它的属性、方法;这种动态获取信息以及动态调用对象方法的功能,称之为反射。二、通过反射查看类信息1.获取Class对象类被加载后,会生成一个对应的Class对象。通过Class对象,就能访问到JVM中的这个类。获取Class对象,概括分为3中方式: //通过静态方法forName实现 ...原创 2019-04-18 15:41:32 · 120 阅读 · 0 评论 -
Java注解学习笔记
前言要想理解Annotation的作用,就必须先得知道何为元数据。元数据就是关于数据的数据,是添加到程序元素诸如方法、字段、类和包上的额外信息。注解Annotation就是Java平台的元数据,该机制允许在代码中添加自定义注释,并允许通过反射,以编程方式访问元数据注释。通过为类、方法等提供附加额外数据的标准方法,元数据功能具有简化和改进的潜在能力。Annotation作用注解的作用,就是元...原创 2019-04-19 10:14:15 · 173 阅读 · 0 评论 -
Java基础之IO笔记
一、字节和字符在java中有输入、输出两种io流,每种输入、输出流又分为字节流、字符流两大类。关于字节,每个字节(byte)有8bit组成。关于字符,代表一个汉字或者英文字母。字节、字符的关系java采用unicode编码,2个字节表示1个字符,一个中文或者英文字符的unicode编码都占用2个字节。但如果采用其他编码格式,就不尽相同了。举栗解释String类是按照unicode编码的,...原创 2019-04-19 14:14:58 · 153 阅读 · 0 评论 -
RandomAccessFile学习笔记
简介RandomAccessFile是一个神奇的存在,既可以从文件中读,又可以向文件输出数据。另外还支持“随机访问”,可以直接跳转到文件的任意位置来读写数据。RandomAccessFile还可以自由定义指针,可向已经存在的文件内追加内容。但是,它只能读写文件,不能操作其他IO节点。RandomAccessFile中的方法1.构造方法RandomAccessFile(File file,...原创 2019-04-19 14:55:32 · 318 阅读 · 0 评论 -
Java基础之异常
简介java异常是java提供的一种识别、响应错误的一致性机制。异常机制可以保证正常业务代码和异常处理代码分离,保证程序的健壮性。在有效使用异常的情况下,异常能清楚的反应3W:异常类型回答什么被抛出,异常堆栈跟踪回答在哪抛出,异常信息回答为什么被抛出。关键字1.try:用于监听,try语句块内的代码出现异常时,异常就会被抛出。2.catch:用于捕获异常,捕获try抛出的异常3.fina...原创 2019-04-19 16:37:43 · 113 阅读 · 0 评论 -
Java抽象类和接口的区别
抽象的理解abstract class和interface是java对于抽象类定义进行支持的两种方式,得益于此,Java拥有强大的面向对象的能力。abstract class和interface在抽象类的定义上,有很大相似性,甚至可以互相替换。尽管如此,它俩之间还是有很大区别的。下面从2个角度来对比语法定义理解抽象类:abstract class Demo { abstract ...原创 2019-04-19 17:06:31 · 115 阅读 · 0 评论 -
Java中finally和return执行顺序
思考一个问题Java异常捕获机制try…catch…finally块中的finally语句是否一定会被执行?起码在以下两种情况下是不会被执行的:1.在try之前就返回了,try没有执行到。2.try中System.exit(0)来终止JVM。JVM都终止了,自然finally也就不会再执行了栗证public class FinallyTest1 { public static v...原创 2019-04-21 16:51:31 · 5357 阅读 · 2 评论 -
transient的作用和使用
概述一个类只要实现了Serilizable接口,类中所有的属性和方法都会自动序列化。然而,有些属性并不需要序列化(如银行账号、密码等),不需要在网络操作中被传输。此时,这些属性就可以加上transient关键字(生命周期仅存在于调用者的内存中,不会写到磁盘里持久化)。transient举栗public class User implements Serializable{ priva...原创 2019-04-21 12:36:50 · 546 阅读 · 0 评论 -
LinkedList源码分析
简介LinkedList底层使用双向链表结构,有一个头结点和一个尾结点。这就意味着我们既可以从头开始正向遍历,也可以从尾开始逆向遍历。从它的继承关系和实现,extends AbstractSequentialList implements List, Deque, Cloneable, Serializable ,可以看出来和ArrayList有相同的也有不同的。它继承了AbstractSeq...原创 2019-04-10 11:08:15 · 153 阅读 · 0 评论 -
TreeMap源码分析
前言了解过hashmap和linkedhashmap的应该知道,hashmap不能保证有序,linkedhashmap可以保证插入顺序。但如果想保证key的大小顺序,就得用到treemap。treemap的底层实现是红黑树,不了解红黑树的可以查看我的红黑树学习笔记。先看成员变量public class TreeMap<K,V> extends AbstractMap<K,V...原创 2019-04-11 17:27:26 · 163 阅读 · 0 评论 -
ConcurrentHashMap源码分析(2)——JDK1.8的实现
ConcurrentHashMap源码分析(1)——JDK1.7的实现前言在JDK1.7版本上,ConcurrentHashMap还是通过分段锁来实现的,Segment的数量制约着并发量。在JDK1.8中,已经摒弃了这种结构设计,而是直接采用Node数组+链表+红黑树的结构来实现,同时并发控制使用Synchronized和CAS来操作。啥是CAS?研究CAS之前,首先我们得先了解一个概念。...原创 2019-04-08 16:06:31 · 417 阅读 · 1 评论 -
LinkedHashMap源码分析
简介LinkedHashMap继承HashMap(线程不安全…),内部主体还是一个哈希表,底层用的仍然是拉链式散列结构,由数组+链表/红黑树组成(加入红黑树分析起来可能会有一点乱,本文淡化红黑树分析,以双向链表为主。如果对红黑树不熟悉,可以参考我的红黑树学习笔记)。在HashMap的基础上,重写了一个Entry,并在上面添加了两个变量:前继结点引用before和后继结点引用after,也就是双向...原创 2019-04-12 15:24:11 · 468 阅读 · 0 评论 -
HashMap存自定义对象为什么要重写 hashcode 和 equals 方法?
HashMap的k放过自定义对象么?当我们把自定义对象存入HashMap中时,如果不重写hashcode和equals这两个方法,会得不到预期的结果。class Key{ private Integer id; public Integer getId() { return id; } public Key(Integer id) { ...原创 2019-04-03 17:38:15 · 3331 阅读 · 0 评论 -
HashMap源码分析
HashMap源码分析吐槽一下先哈希表,数组链表?HashMap源码分析Map接口源码keySetvaluesEntryHashMap成员变量啥是扩容机制?HashMap构造函数集合添加到哈希表中HashMap结点put函数功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants...原创 2019-04-03 17:44:40 · 230 阅读 · 0 评论 -
ArrayList源码分析
简介ArrayList是一个动态数组,与普通数组相比,他可以动态的增加或者减少里面的元素(当然不是无限制的)。它extends AbstractList,implements List,提供了增加、修改、删除、遍历这些方法。它实现了Cloneable接口,即覆盖了函数clone(),表示能被克隆。实现了java.io.Serializable接口,意味着ArrayList支持序列化,能通过序...原创 2019-04-09 17:11:26 · 139 阅读 · 0 评论 -
Java深拷贝与浅拷贝
前言对象拷贝Object Copy是将一个对象的属性,拷贝到另一个相同类型的对象中。拷贝对象主要是为了在新的上下文环境中复用对象的部分或全部数据。其中对象拷贝有3种类型:深拷贝Deep Copy、浅拷贝Shallow Copy和延迟拷贝Lazy Copy。浅拷贝...原创 2019-04-20 17:12:43 · 147 阅读 · 0 评论 -
equals和==的区别
1、==比较的是变量(栈)内存中存放的对象(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指向相同一个对象。比较的是真正意义上的指针操作2、equals用来比较的是两个对象的内容是否相等。由于所有的类都继承自java.lang.Object类,所以适用于所有对象。如果对该方法进行重写的话,调用的仍然是Object方法,而Object中的equals方法返回的却是“等等”的判断...原创 2019-04-20 10:58:42 · 106 阅读 · 0 评论