Java
文章平均质量分 93
Java
pianozcl
这个作者很懒,什么都没留下…
展开
-
HashMap源码解析
前言本篇文章来介绍我们常用的集合类 HashMap,它通过散列函数将数据映射到表中的某个位置,以提升查询速度。其底层用于存放数据的数组也叫散列表所谓散列函数,简单来说就是将一个无限大的集合(在 HashMap 中,key值是一个无限大集合),经过 hash 运算取模,均匀的分布在一个有限的集合(我们定义的哈希表容量,比如长度 16 的数组)我们知道 Java 中的 HashMap 底层是一个数组,数组的每个元素是一个链表或者红黑树。我们也知道它的一些特性,比如允许key、value 可以为原创 2021-01-17 14:18:16 · 192 阅读 · 0 评论 -
ArrayList源码解析
前言在业务场景以及日常开发中,ArrayList往往是最频繁使用的List实现类,这由它的结构以及特性决定。ArrayList顾名思义,其底层是由数组实现,因此查询时间复杂度是常数级别的,再加之有一些小优化,查询速度会更快。由于其底层是数组实现,插入和删除都是O(n)级别的。业务场景往往是多读少写的,因此ArrayList就很适合。下面就来解析ArrayList的源码以及常见方法的实现本篇文章基于JDK8正文1. 成员变量首先看一下它的成员变量DEFAULT_CAPACITY = 10原创 2020-12-10 00:00:29 · 1979 阅读 · 0 评论 -
一分钟彻底掌握Java位运算
前言在阅读源码的时候,经常会碰到位运算,例如Java8中的HashMap部分源码。不同语言有各自的位运算方式,又大同小异。本篇文章带你一分钟彻底掌握Java中的位运算 /** * 这段代码是计算hashcode的,其中的位运算和异或运算是为了降低hash碰撞概率 */ static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCod原创 2020-11-22 18:37:49 · 2053 阅读 · 1 评论 -
单例模式的Java代码实现
一 饿汉式类加载到内存后,只能在内存中有一个实例,JVM保证线程缺点:不管是否用到,类加载时就会实例化public class Singleton { private static final Singleton INSTANCE=new Singleton(); //私有构造方法 private Singleton(){ } public static Singleton getInstance(){ return INSTANCE;原创 2020-08-02 22:02:51 · 650 阅读 · 0 评论 -
Java线程状态转换(最详细的状态转换流程图)
Java线程的状态和状态转换new,runnable,timed waiting,waiting,blocked,terminated.New 代表创建但是未启动的线程runnable又可分为ready和running两个子状态,由于单个cpu同一时间只可以执行单个线程,多线程的分配是通过cpu时间片来分配的,因此有一部分线程会在等待队列,也就是ready状态。CPU的Thread scheduling(线程调度)决定着线程什么时候可以实际运行处于runnable状态的线程在JVM层原创 2020-07-19 00:22:44 · 1061 阅读 · 0 评论