走进JDK(六)------ArrayList】的更多相关文章

对于广大java程序员来说,ArrayList的使用是非常广泛的,但是发现很多工作了好几年的程序员不知道底层是啥...这我觉得对于以后的发展是非常不利的,因为java中的每种数据结构的设计都是非常完善的,学习了这种思想,在设计自己的容器是非常有帮助的. 一.ArrayList底层结构 ArrayList的底层其实就是一个数组,数组的劣势想必也不用多说,一旦创建,长度无法更改.而ArrayList则可以不停的add或是remove,也可以称之为动态数组. 二.类定义以及成员变量 1.类定义 //1…
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import…
有人说HashMap是jdk中最难的类,重要性不用多说了,敲过代码的应该都懂,那么一起啃下这个硬骨头吧!一.哈希表在了解HashMap之前,先看看啥是哈希表,首先回顾下数组以及链表数组:采用一段连续的存储单元来存储数据.对于指定下标的查找,时间复杂度为O(1):通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn):对于一般的插入删除操作,涉及到数组元素的移动,其…
说完了list,再说说colletion另外一个重要的子集set,set里不允许有重复数据,但是不是无序的.先看下set的整个架构吧: 一.类定义 public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> 这地方跟之前的地方一样,为啥继承了AbstractCollection<E>还需要实现Set<E>呢?前面ArrayList的文章已…
本文基于java8. 基本概念: Jvm 内存中 String 的表示是采用 unicode 编码 UTF-8 是 Unicode 的实现方式之一 一.String定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String是个final类,不允许继承.并且实现了Serializable, Comparable<String>, CharSe…
要学习LinkedList,首先得了解链表结构.上篇介绍ArrayList的文章中介绍了底层是数组结构,查询快的问题,但是删除时,需要将删除位置后面的元素全部左移,因此效率比较低. 链表则是这种机制: 此图展示的是一个单向列表,单向链表只能向一个方向遍历.链表中存在一系列的节点(node),每个node中维护了一个data以及一个next链,data则保存当前node所需要保存的数据,而next链指向下一个元素,最后一个node的next指向null. 这个则是个典型的双向链表,双向链表中一共存…
接下来的一段时间重点介绍java.util这个包中的内容,这个包厉害了,包含了collection与map,提供了集合.队列.映射等实现.一张图了解java中的集合类: AbstractList 一.list简介 list是啥?为啥会有list的存在呢?java中的数组相信大家都是非常熟悉的,可以存放多个数据,但是数组有一个缺点,就是数组在创建之后,长度就不可更改(但是针对于数组的元素可以更改),若你需要在后续过程中往数组中添加数据,那麻烦了,不支持. list在java中是collection…
阅读JDK源码也是一件非常重要的事情,尤其是使用频率最高的一些类,通过源码可以清晰的清楚其内部机制. 如何阅读jdk源码(基于java8)? 首先找到本地电脑中的jdk安装路径,例如我的就是E:\jdk, src.zip中就包含了jdk的所有源码,并将相关源码导入到ideal.eclipse等等,如图: 第一步就来介绍所有类的基类Object,先看下此类的架构图:  一.registerNatives private static native void registerNatives(); s…
在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这: Java集合(五)--LinkedList源码解读 Java集合(四)--基于JDK1.8的ArrayList源码解读 这篇文章,对比一下ArrayList和LinkedList和Vector,主要是前面两个,因为Vector很少使用,如果考虑并发安全,也会使用 CopyOnWriteArrayList ArrayList和LinkedList的对比:插入.修改.删除.遍历 顺序插入add(Object): 1.Ar…
这是博主第二次读ArrayList 源码,第一次是在很久之前了,当时读起来有些费劲,记得那时候HashMap的源码还是哈希表+链表的数据结构. 时隔多年,再次阅读起来ArrayList感觉还蛮简单的,但是HashMap已经不是当年的HashMap了,所以下一篇会写HashMap的. 起因:最近写了一个简单的文件校验方法,然后犯了一些比较低级的错误,博主的师兄在进行发布CR时,提出了一些建议,博主感觉羞愧难当,特此记录一下,诸君共勉.代码以及建议如下,已做脱敏处理: /** * 修改前 */ pu…