Java
文章平均质量分 90
qisong3
这个作者很懒,什么都没留下…
展开
-
深入JVM垃圾回收——垃圾回收算法
目录 前言 垃圾产生 垃圾定位 引用计数 可达分析 垃圾回收 标记-清除算法 复制清除算法 标记-整理算法 算法对比 前言 Java虚拟机规范中提到:"Java堆中存储的对象由自动内存管理系统(垃圾回收器)负责收集,不可以被显式销毁"。这一规定描述了Java作为静态语言有别于C/C++的一大特色:自动管理和回收堆中内存,无需开发者手动触发。这既是Java语言的一大优点,让开...原创 2019-03-11 22:18:48 · 187 阅读 · 0 评论 -
Java容器——HashMap(Java8)源码解析(二)
在前文中介绍了HashMap中的重要元素,现在万事俱备,需要刨根问底看看实现了。HashMap的增删改查,都离不开元素查找。查找分两部分,一是确定元素在table中的下标,二是确定以指定下标元素为首的具体位置。可以抽象理解为二维数组,第一个通过哈希函数得来,第二个下标则是链表或红黑树来得到,下面分别来说。 一 哈希函数 说到HashMap,最值得引起注意的自然是接近常数级别的操作速度,大家也都...原创 2018-12-16 15:47:31 · 239 阅读 · 0 评论 -
Java容器——HashMap(Java8)源码解析(一)
一 概述 HashMap是最常用的Java数据结构之一,是一个具有常数级别的存取速率的高效容器。相对于List,Set等,结构相对复杂,本篇我们先对HashMap的做一个基本说明,对组成元素和构造方法进行介绍。 二 继承关系 首先看HashMap的继承关系,比较简单,实现了Map和序列化等。 ...原创 2018-12-16 15:47:23 · 294 阅读 · 0 评论 -
JAVA容器——Stack(JAVA8) 源码解析
一 栈简介 栈是一种常用的线性抽象数据结构,在计算机中应用极为广泛。栈有两个为人熟知的特性,一是进出栈的顺序是先进后出(FILO),即最先进栈的数据最后出栈,当然相对的也有后进先出(LIFO),最后进栈的数据先出栈。另一个是支持两个通用操作:Push:将元素推进栈;Pull:从栈中取出数据。 栈的操作演示见下图,这里需要注意的是1的位置对应的是栈底,后面再Push的元素...原创 2018-11-21 20:10:16 · 286 阅读 · 0 评论 -
Java容器——Hashtable(Java8)源码解析
Hashtable是一种键值对型Java存储容器,自JDK1.0沿用至今。经常有将Hashtable和HashMap进行比较的例子和文章,实际上早期二者的实现原理基本一致,而HashTable的操作方法都进行了加锁,因而线程安全。本文从源码角度介绍HashTable的实现。 一 组成元素 1 关键变量 /** * Hashtable bucket...原创 2018-10-29 20:37:17 · 199 阅读 · 0 评论 -
Java容器——Vector(Java8)源码解析
Vector是Java早期实现的容器,自JDK1.0就存在。目前在日常使用中逐渐被ArrayList或同步的ConcurrentLinkedQueue等代替,不过在早期的代码中和类库中,仍经常能见到Vector,因此有必要对其的组成和原理进行基本的了解。 Vector的继承关系如上图所示,可以看到,Vector和ArrayList的继承关系完全一致(可参考笔者先前的文章...原创 2018-10-29 20:35:03 · 307 阅读 · 0 评论 -
Java容器——ArrayList(Java8 )源码解析
ArrayList是一种常用List类型实现,也是Java集合中的的常用类型,以遍历查询性能优异著称,继承关系如下: 可见ArrayList实现了Cloneable,Serializable,RandomAcess和List接口,继承了AbstractList抽象类,简而言之,ArrayList是一个实现了可复制,可序列化,支持快速随机访问的List类型。这里最重要的是实现了...原创 2018-10-29 20:35:51 · 419 阅读 · 0 评论 -
Java容器——ArrayList VS LinkedList(Java8) 性能比较
ArrayList和LinkedList都继承自List, 内在实现机制有所不同,关于区别方面已经有很多优秀的文章进行了介绍。本文从实践角度出发,对比两种List在不同操作中的性能,便于读者在特定场景中参考选型。由于电脑配置,JDK版本,IDE等会导致测试结果又出入甚至有结论不太一致的结果,本文的试验结果仅具备一定的参考价值。 一 插入数据 以同样的方式向两种List中插入数据,首先插...原创 2018-05-30 23:51:46 · 589 阅读 · 0 评论 -
Java容器——LinkedList(Java8 )源码解析
LinkedList继承自List,是一种常用的容器。虽然同为ArrayList和LinkedList同为List,但二者的实现方式完全不同,导致二者的性能和使用场景都有较大的不同,本文将从源码角度解析LinkedList。 LinkedList的类图关系如上图所示。简而言之,LinkedList是实现了可复制,可序列化的一种双向链表。虽然它同时实现了List和Deq...原创 2018-10-29 20:35:36 · 204 阅读 · 0 评论 -
Java容器——HashSet(Java8)源码解析
HashSet是一种元素集合,实现了Set接口,是一种快速的,去重的集合对象,继承关系见图1所示。 图1 HashSet继承关系图 HashSet继承自Set接口,继承Set的还包括TreeSet,SortedSet等,他们都...原创 2019-01-12 16:36:19 · 227 阅读 · 0 评论