• 【JDK】JDK源码分析-HashMap(1)

    时间:2024-01-09 12:31:55

    概述HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客。它其实就是前文「数据结构与算法笔记(二)」中「散列表」的实现,处理散列冲突用的是“链表法”,并且在 JDK 1.8 做了优化,当链表长度达到一定数量时会把链表转为红黑树。因此,JDK 1.8 中的 HashMap 实现可以理...

  • 【JDK】JDK源码分析-AbstractQueuedSynchronizer(2)

    时间:2024-01-09 12:23:02

    概述前文「JDK源码分析-AbstractQueuedSynchronizer(1)」初步分析了 AQS,其中提到了 Node 节点的「独占模式」和「共享模式」,其实 AQS 也主要是围绕对这两种模式的操作进行的。Node 节点是对线程 Thread 类的封装,因此两种模式可以理解如下:独占模式(e...

  • 【JDK】JDK源码分析-ArrayList

    时间:2024-01-09 12:19:36

    概述ArrayList 是 List 接口的一个实现类,也是 Java 中最常用的容器实现类之一,可以把它理解为「可变数组」。我们知道,Java 中的数组初始化时需要指定长度,而且指定后不能改变。ArrayList 内部也是一个数组,它对数组的功能做了增强:主要是在容器内元素增加时可以动态扩容,这也...

  • JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable

    时间:2024-01-09 12:09:50

    JDK 源码分析(4)—— HashMap/LinkedHashMap/HashtableHashMapHashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时候,会保证给定的初始容量为2次幂,如下:// Find a power of 2 >= initi...

  • JDK源码分析(一)—— String

    时间:2024-01-09 12:08:58

    dir参考文档JDK源码分析(1)之 String 相关

  • 【JDK】JDK源码分析-Vector

    时间:2024-01-09 12:03:42

    概述上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理。本文分析 List 接口的另一个实现类:Vector。Vector 的内部实现与 ArrayList 类似,也可以理解为一个「可变数组」。其继承结构如下(省略部分接口):PS: 由于 Vector 目前使用较少...

  • 【JDK】JDK源码分析-CountDownLatch

    时间:2024-01-09 12:06:28

    概述CountDownLatch 是并发包中的一个工具类,它的典型应用场景为:一个线程等待几个线程执行,待这几个线程结束后,该线程再继续执行。简单起见,可以把它理解为一个倒数的计数器:初始值为线程数,每个线程结束时执行减 1 操作,当计数器减到 0 时等待的线程再继续执行。代码分析CountDown...

  • JDK 1.6 HashMap 源码分析

    时间:2024-01-09 11:31:42

    前言​前段时间研究了一下JDK 1.6 的 HashMap 源码,把部份重要的方法分析一下,当然HashMap中还有一些值得研究得就交给读者了,如有不正确之处还望留言指正。准备​需要熟悉数组和链表这两个基本数据结构。如果对链表不太熟悉的话,可以来几道leetcode上的相关的链表算法题。熟悉后看 H...

  • JDK源码解析---HashMap源码解析

    时间:2024-01-09 11:24:24

    HashMap简介HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。...

  • JDK8中的HashMap源码

    时间:2024-01-09 11:17:20

    背景很久以前看过源码,但是猛一看总感觉挺难的,很少看下去。当时总感觉是水平不到。工作中也遇到一些想看源码的地方,但是遇到写的复杂些的心里就打退堂鼓了。最近在接手同事的代码时,有一些很长的python脚本,没有一行注释。就硬着头皮一行一行的读,把理解的都加上注释,这样一行行看下来,终于知道代码的意思了...

  • JDK 1.8之 HashMap 源码分析

    时间:2024-01-09 11:12:38

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/75579654构造函数NodehashputtreeifyBingetresize参考与JDK1.7中HashMap的实现相比,JDK1.8做了如下改动:hash()函数算法修改table...

  • 由JDK源码学习ArrayList

    时间:2024-01-07 22:39:32

    ArrayList是实现了List接口的动态数组.与java中的数组相比,它的容量能动态增长.ArrayList的三大特点:① 底层采用数组结构② 有序③ 非同步下面我们从ArrayList的增加元素、获取元素、删除元素三个方面来学习ArrayList。ArrayList添加元素因为ArrayLis...

  • 【JDK1.8】JDK1.8集合源码阅读——IdentityHashMap

    时间:2024-01-04 13:38:03

    一、前言今天我们来看一下本次集合源码阅读里的最后一个Map——IdentityHashMap。这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊。就笔者来说,到目前为止还没有用到过它 ┐(゚~゚)┌。它的罕见与它的用途有关,当时的Map设计者是这么说的:This cla...

  • JDK1.8源码(四)——java.util.Arrays 类

    时间:2024-01-03 08:18:39

    java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。1、asList public static <T> List<T> asList(T... a) { ...

  • JDK1.8源码(四)——java.util.Arrays类

    时间:2024-01-03 08:06:16

    一、概述1、介绍Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用。二、类源码1、asList()方法将一个泛型数组转化为List集合返回。但是,这个List集合既不是ArrayList实例,也不是Vector实例。它是一个...

  • 一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要

    时间:2024-01-03 08:03:41

    一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要liuyuhang原创,未经允许禁止转载本文举例使用的是JDK8的API目录:一点一点看JDK源码(〇)1.什么是链表链表是一种常见的数据结构,属于一种线性表。虽说链表是线性表,但是其储存的方式并非是线性的,而是节点(N...

  • 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历

    时间:2024-01-03 07:59:03

    一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历liuyuhang原创,未经允许禁止转载本文举例使用的是JDK8的API目录:一点一点看JDK源码(〇)Spliterator为jdk1.8新增接口,由ArrayList.spliterator(...

  • 一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator

    时间:2024-01-03 07:58:10

    一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparatorliuyuhang原创,未经允许禁止转载本文举例使用的是JDK8的API目录:一点一点看JDK源码(〇)Comparator为额外实现的比较接口,与类本身无关该接口在ArrayList的sort中有...

  • 一点一点看JDK源码(〇)

    时间:2024-01-02 23:59:06

    一点一点看JDK源码(〇)liuyuhang原创,未经允许进制转载写在前面:几乎所有的大神都会强调看源码,也强调源码的重要性;但是如何看源码,源码看什么?看了什么用?看了怎么用?困扰很多人,尤其是初学者。本系列的目的在于看源码,并非学习和总结源码,先能够粗略的浏览大量的原码并保证知晓有这么个东西,有...

  • JDK1.8源码(三)——java.util.HashMap

    时间:2024-01-02 23:51:15

     什么是哈希表?在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插...