一.基本概念 Java容器类库的用途是"保存对象",容器库类分为两个不同的分支. 1.Collection.可以保存一个或多个对象,将其保存为一个序列.Collection又可以细分为List(表),Set(集)和Queue(队列).List按照插入顺序保存对象,从索引0开始为每一个插入的对象分配一个索引.Set与List类似,但与List不同的是Set中不能有相同的对象.Queue对象产生的顺序通常与元素的插入顺序相同,一般按照先进先出的规则来删除与访问元素. 2.Map.Map(映…
一.基本概念 迭代器是一个对象,也是一种设计模式,Java有两个用来实实现迭代器的接口,分别是Iterator接口和继承自Iterator的ListIterator接口.实现迭代器接口的类的对象有遍历集合对象,选择集合中的元素和删除集合中元素的方法.而在使用它时不必知道该集合对象底层的结构.Java类库中实现Iterator接口的迭代器只能正向遍历集合中的元素,而实现ListIterator接口的迭代器不仅能够正向遍历,还能够反向遍历集合中的元素. 二.源码分析 2.1.Iterator接口与L…
目录 概述 内部字段及构造方法 哈希值与索引计算 存储元素 扩容 删除元素 查找元素 总结 概述   在上文我们基于JDK7分析了HashMap的实现源码,介绍了HashMap的加载因子loadFactor.阈值threshold概念以及增删元素的机制.JDK8在JDK7的基础上对HashMap的实现进行了进一步的优化,最主要的改变就是新增了红黑树作为底层数据结构. HashMap数据结构   首先我们回忆一下JDK7中HashMap的实现,HashMap是以数组和单链表构成,当出现哈希冲突时,…
@(Java)[Reference] Java Reference 源码分析 Reference对象封装了其它对象的引用,可以和普通的对象一样操作,在一定的限制条件下,支持和垃圾收集器的交互.即可以使用Reference对象来引用其它对象,但是最后还是会被垃圾收集器回收.程序有时候也需要在对象回收后被通知,以告知对象的可达性发生变更.   Java提供了四种不同类型的引用,引用级别从高到低分别为FinalReference,SoftReference,WeakReference,PhantomR…
常用类及源码分析 集合类 原理分析 Collection   List   Vector 扩充容量的方法 ensureCapacityHelper很多方法都加入了synchronized同步语句,来保证线程安全Vector中也允许元素为nullVector现在已经基本不再使用 ArrayList ArrayList是基于数组实现 不是线程安全的,只能用在单线程环境下可以通过下标索引直接查找到指定位置的元素,因此查找效率高,但每次插入或删除元素,就要大量地移动元素,插入删除元素的效率低允许元素为n…
Java Collections API源码分析 侯捷老师剖析了不少Framework,如MFC,STL等.侯老师有句名言: 源码面前,了无秘密 这句话还在知乎引起广泛讨论. 我对教授程序设计的一点想法是: 同学们开始不会编程,最好的学习方式是读教材,敲代码,我还专门写了一篇博客指导同学们敲代码:<积极主动敲代码,使用Junit学习Java程序设计>,我认为阅读经典图书,积极主动敲5000行左右的代码,应该能解决语言基本语法的问题,基本程序设计的问题,基本工具(git,jdb,junit,id…
以下内容基于jdk1.7.0_79源码: 什么是HashMap 基于哈希表的一个Map接口实现,存储的对象是一个键值对对象(Entry<K,V>): HashMap补充说明 基于数组和链表实现,内部维护着一个数组table,该数组保存着每个链表的表头结点:查找时,先通过hash函数计算hash值,再根据hash值计算数组索引,然后根据索引找到链表表头结点,然后遍历查找该链表: HashMap数据结构 画了个示意图,如下,左边的数组索引是根据hash值计算得到,不同hash值有可能产生一样的索引…
java提高篇(二一)-----ArrayList 一.ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小. 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小.默认初始容量为10.随着ArrayList中元素的增加,它的容量也会不断的自动增长.在每次添加新的元素时,Array…
Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长连接解决连接数和阻塞io问题 为此详细阅读了netty源码, 熟悉了netty的各个主要的特性以及疏通各个组件的关联关系, 所以想把这段时间的学习内容, 学习经验毫无保留的分享给大家, 自己提高的同时也帮助大家一起成长 内容中我会把每个知识点通过每个章节去进行剖析, 每个章节也会尽可能的将关键的流程…
第1部分 Vector介绍 Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. Vector 继承了AbstractList,实现了List:所以,它是一个队列,支持相关的添加.删除.修改.遍历等功能. Vector 实现了RandmoAccess接口,即提供了随机访问功能.RandmoAccess是java中用来被List实现,为List提供快速访问功能的…