概述 不久前阅读了 HashMap 的源码,今天来看下 LinkedHashMap 的源码,LinkedHashMap 继承自 HashMap,然后在类中新增了 head、tail、accessOrder 三个字段,其中会将插入、删除的数据与 head、tail 这两个字段进行关联,也就是说 LinkedHashMap 通过 head、tail 来保留了插入时的顺序。在查询到某个节点时,如...
TreeMap 源码解读(JDK 1.8)
概述 TreeMap 从名字中可以看出应该是跟树有关,没错,TreeMap 便是直接使用红黑树实现的,而 HashMap 则是当链表数组和某个链表同时达到一定长度时才会将链表转为红黑树。同时 TreeMap 还是有序的,这就要求 Key 必须是可以进行比较的!即实现 Comparable 接口,否则在插入或者查询时会抛出类型转换异常,接下来看源码。 源码 public class Tr...
HashMap 源码解读(JDK 1.8)
概述 HashMap 是我们常用的集合之一,其数据是键值对的格式存储的,底层使用的链表数组实现的,当某个链表的长度达到一定长度时,会优先对数组链表进行扩容,当链表数组达到一定的长度后,便会将链表转换为红黑树。我们常使用的方法有的 put、get、containsKey、containsValue 等,接下来我们会通过源码解析来了解他是如何实现的。但凡有理解偏差,也希望各位不要吝啬,尽情指出...
Java 集合体系学习
概述 Java 最常见的四种集合为 List Set Queue Map 其中,List、Set、Queue 均实现了 Collection 接口,而 Collection 又继承自 Iterable 接口,也就是说,List、Set、Queue 均是可以进行遍历的。而 Map 则是键值对形式的数据结构。 List 特点 有序 可重复 提供了按索...
JVM 内存区域
概述 jvm 内存区域整体分为5个部分: 程序计数器 Java 虚拟机栈 本地方法栈 Java 堆 方法区 程序计数器(Program Counter Register) 程序计数器可以看作是当前线程执行的字节码的行号指示器。Java 虚拟机的多线程是通过轮流切换并分配处理器的执行时间的方式来实现的,为了保证每个线程切换后恢复到正确的执行位置,每条线程都有一个...
Cookie & ThreadLocal 代替 session 实现无状态登录
/** * 当前用户类 */ @Data public class Principal { private int id; private String username; private String password; private String token; } /** * 描述类 */ public class PrincipalHolder { private Pr...
进制转换
前言 数制是用一组固定的符号和统一的规则来表示数值的方法 计算机底层是用的是数制是二进制 用 Java 编程使用的是十进制。Java 底层仍使用二进制 计算机常用的数制还有八进制和十六进制 进制 十进制 十进制的基本数字是0~9,逢10进位。10称作“基数”,10^n (10的n次幂)被称作“权”。 10000=1*10^4 1000=1*10^3 10...
SQL 类型
DDL:data definition language,数据库模式定义语言,关键字:create DML:data manipulation language,数据操纵语言,关键字:Insert、delete、update DCL:data control language,数据库控制语言 ,关键字:grant、remove ...
this & ClassName.this
概述 this 代表的是当前实例 ClassName.this 代表的是也是 ClassName 这个类的当前实例。经常会出现在 jdk 源码中,当一个内部类需要调用外部类的实例时。 案例 public abstract class AbstractMap<K, V> implements Map<K, V> { public Set<...
Centos 7 安装 gitlab
安装 gitlab 安装配置依赖项 sudo yum install curl policycoreutils openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo yum install postfix sudo systemct...