java集合系列
愚公要移山
这个作者很懒,什么都没留下…
展开
-
一文搞懂WeakHashMap工作原理(java后端面试高薪必备知识点)
这个问题是一个高频面试题,本篇文章将从概念、原理、实际使用的角度来分析。希望对你有帮助:一、什么是WeakHashMap?从名字可以得知主要和Map有关,不过还有一个Weak,我们就更能自然而然的想到这里面还牵扯到一种弱引用结构,因此想要彻底搞懂,我们还需要知道四种引用。如果你已经知道了,可以跳过。1、四种引用在jvm中,一个对象如果不再被使用就会被当做垃圾给回收掉,判断一个对象是否是垃圾,通常有两种方法:引用计数法和可达性分析法。不管是哪一种方法判断一个对象是否是垃圾的条件总是一个对象的引用是都没原创 2020-05-11 12:59:49 · 10670 阅读 · 0 评论 -
HashMap的负载因子初始值为什么是0.75?这篇文章以最通俗的方式告诉你答案
之前写过一篇专门介绍HashMap的文章,反响很不错,不过在留言区问的最多的问题就是HashMap的负载因子初始值为什么是0.75,私下又好好地研究了一番,总结了这篇文章。本篇文章基于JDK1.8,特在此说明。OK。下面我们就开始进行分析。#一、负载因子的作用对于HashMap的研究,我之前一直停留在考虑源码是如何实现的,现在当我重新再来看的时候,才发现,系统默认的各种参数值,才是Ha...原创 2020-01-19 14:34:36 · 14144 阅读 · 8 评论 -
面试官:从源码分析一下TreeSet(基于jdk1.8)
这个TreeSet其实和HashSet类似。HashSet底层是通过HashMap实现的,TreeSet其实底层也是通过TreeMap实现的。这篇文章就通过源码来分析一下TreeSet。一、简介TreeSet的作用是保存无重复的数据,不过还对这些数据进行了排序。TreeMap的底层是通过红黑树实现的,所以TreeSet底层也是通过红黑树实现的。TreeSet最主要的特点就是对元素进行了排序。我...原创 2019-09-27 10:23:20 · 200 阅读 · 0 评论 -
三句话都能解释清楚的java集合类HashSet,你清楚吗?
题目:三句话都能明白的java集合类HashSet,你都知道吗?HashSet作为一种最简单的java集合类,真的可以用三句话来概括一下:第一句:存放不重复的数据。第二句:底层基于hash表实现。第三句:内部基于HashMap。这也就是说,你想要完完全全彻彻底底地把HashSet吃透,就一定要先吃透HashMap。这篇文章将带着你从特点到存储,再到最后的实现,从源码角度来分析一下。...原创 2019-09-25 21:46:28 · 134 阅读 · 0 评论 -
Hashtable源码分析(基于jdk1.8,推荐)
Hashtable也算是集合系列中一个比较重要的集合类了,不过在介绍Hashtable的时候,总是不可避免的谈到HashMap,在面试的时候Hashtable往往也会结合HashMap一块来问。这篇文章就来好好地分析一下Hashtable一、认识Hashtable1、继承关系为了能好好的理解Hashtable,我们先看一下他在整个集合体系中的位置:从上面的图我们会发现,Hashtable...原创 2019-09-16 20:46:18 · 347 阅读 · 0 评论 -
TreeMap源码分析(基于jdk1.8)
之前花了很多时间写了HashMap,HashMap算是超级重要的一个知识点了,面试的时候特种问题各种变形都有可能会问到。相对于HashMap,好像TreeMap显得有点不那么重要了,但是常常会伴随着HashMap来提问。因此花了一部分时间对其进行整理了一下。一、认识TreeMap1、继承关系其实从名字就可以看出主要是和树有关,而且这棵树还是赫赫有名的红黑树。因为其处于java集合体系一个一个...原创 2019-08-22 16:54:27 · 283 阅读 · 0 评论 -
HashMap源码分析(jdk1.8,保证你能看懂)
现在的面试当中凡是那些大厂,基本上都会问到一些关于HashMap的问题了,而且这个集合在开发中也经常会使用到。于是花费了大量的时间去研究分析写了这篇文章。本文是基于jdk1.8来分析的。篇幅较长,但是都是循序渐进的。耐心读完相信你会有所收获。一、带着问题分析这篇文章,希望能解决以下问题。(1)HashMap的底层数据结构是什么?(2)HashMap中增删改查操作的底部实现原理是什么?(3...原创 2019-08-21 22:32:32 · 1159 阅读 · 1 评论 -
java集合类(7)Stack
这篇文章开始介绍Stack。从名字看他就是一个stack,因此具有数据结构中栈的一般特性(后进先出),平时用起来相对较多一点,但是也是非常简单。这篇文章我们将从源码的角度来分析一下Stack。OK,开始今天的文章。一、认识StackStack继承自Vector。底层是通过数组实现的。下面我们认识一下Stack在整个java集合体系中的位置:我们会发现,其实Stack就是继承自Vector...原创 2019-07-30 10:22:20 · 181 阅读 · 0 评论 -
java集合类(1)总体框架
在平时写代码的时候,我们经常会使用到java的一些集合类,还记得我在刚刚学习的时候,因为这些集合类太多,没有把他们的特点还有使用场景记清楚,所以在使用的时候对软件的性能造成了很大的影响,因此现在我想把这些集合类进行一个详细的整理,方便别人面试或者是初学者理解其概念。这篇文章的大体结构如下:1、对java集合框架一个整体的认识和了解2、通过继承关系图认识集合的整体框架3、提前给出各个集合类...原创 2019-06-10 21:20:15 · 422 阅读 · 1 评论 -
java集合类(2)Collection
前言前一篇博客,我们基本上认识了集合,从这篇博客开始参考API文档,和源码分析,详细的介绍每个集合类的使用,力求在源码的角度来分析,加深理解。先看一下java集合类的继承图图片详细的介绍了各种集合类的继承关系。Java 的集合主要按两种接口分类:Collection, Map。下面开始第一个集合类的介绍Collection:Collection是一个接口,它主要的两个分支是:List ...原创 2019-07-01 21:56:50 · 173 阅读 · 0 评论 -
java集合类(3)ArrayList
这篇文章开始介绍ArrayList。ArrayList基本上是我们在平时的开发当中,使用最多的一个集合类了,它是一个其容量能够动态增长的动态数组。所以这篇文章,旨在从源码的角度进行分析和理解。为了使得文章更加有条理,还是先给出这篇文章的大致脉络:首先,ArrayList的基本介绍和源码API(只给出方法分析,重要的方法给出详细代码)。然后,介绍遍历ArrayList的几种方式接下来,叙述一...原创 2019-07-05 15:22:57 · 217 阅读 · 0 评论 -
java集合类(4)fail-fast
今天来看java集合中一个常见的错误机制fail-fast机制。出现在这个错误机制的本质就是因为单线程和多线程的不同。下面就好好看一下这个机制是怎么是出现的。一、认识fail-fast今天在运行项目的时候,突然就出现了ConcurrentModificationException异常。原因是多线程中使用的,因为在多线程中使用了ArrayList,造成了这么一个异常。这是今天所讲的集合的fai-...原创 2019-07-05 15:24:37 · 144 阅读 · 0 评论 -
java集合类(5)LinkedList
这篇文章开始介绍LinkList。他和ArrayList有一些相似,在上一篇文章讲解 ArrayList时,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差。如果在不确定元素数量的情况时,不建议使用ArrayList。这种情况下,我们就可以使用LinkedList了。所以这篇文章,旨在从源码的角度进行分析和理解LinkedList。OK,开始今天的文章。一、...原创 2019-07-08 17:59:29 · 189 阅读 · 0 评论 -
java集合类(6)Vector
这篇文章开始介绍Vector。他和ArrayList有一些相似,其内部都是通过一个容量能够动态增长的数组来实现的。不同点是Vector是线程安全的。因为其内部有很多同步代码快来保证线程安全。为此,这篇文章,也会通过从源码的角度来分析一下Vector,并和ArrayList等其他集合容器进行一个对比分析。OK,开始今天的文章。一、认识VectorVector可以实现可增长的对象数组。与数组一样...原创 2019-07-12 17:40:27 · 165 阅读 · 0 评论