ArrayList和LinkedList的底层源码之我见
ArrayList集合,都是基于最基本的对数组的操作.(可以说数组是它的灵魂)
修饰符transient:不被序列化
实现IO的 序列化接口
判断索引是否越界异常,
判断容量是否足够,不够就将容量做位运算右移一位(1.5倍)在判断是否足够....(即扩容算法)
通过变量modCount,多线程访问避免抛出索引越界异常而是抛出并发修改异常
增删底层就是弄一个新的数组Arrays.copyof方法存入数据返回.......
底层都是基于最原始操作进行的.
数组
数组的底层又是怎么样的?,数组的底层可以说已经是内存级别的东西了,但是它与基本数据类型有有所不同,虚拟机对他有特殊的操作.对于基本数据类型可以说已经是'元数据'级别了,
数组只是在内存开辟了一个连续的空间用来存储基本数据类型的值和引用类型的地址值.
LinkedList集合 都是基于对链表类的操作(链表类是它的灵魂)
链表类:java.util.LinkedList.Node<E>
它是LinkedList类的内部类:
private static class Node<E> {
//三个属性
E item;
Node<E> next;
Node<E> prev;
//只有一个有参构造方法
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
从链表类的源码可以看出,它是极其简单的一个类:包括一个满参构造和三个字段,分别是:节点元素(就是我们存储的元素对象),上一个链表类地址,下一个链表类地址.
LinkedList集合操作都是基于对这个类的基本操作.
ArrayList和LinkedList的底层源码之我见相关推荐
- ArrayList底层源码分析
声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...
- HashMap 底层源码细致分析
JDK集合HashMap 底层源码细致分析 前言 提示:对于初始 HashMap 的小伙伴来说,不推荐直接硬啃,建议先看一下如下几个视频教程之后再回头好好理解.(一遍看不懂则反复看,一小块一小块的找对 ...
- Java集合框架底层源码
集合底层源码 Collection List ArrayList public abstract class AbstractList<E>{//操作数protected transien ...
- LinkedList(JDK1.8)源码解析
文章目录 概述 继承体系 源码分析 查找 遍历 插入 删除 总结 概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构.和 ArrayList 一样,Linke ...
- Jaca集合(四)Vector集合底层源码分析
Vector的基本介绍: (1)Vector类的定义说明:我们进入源码界面进行查看: public class Vector<E>extends AbstractList<E> ...
- arraylist基操和添加元素源码
ArrayList增加 List接口的实现类. 底层使用数组 查询效率高,增删效率低,不安全. List<String> list=new ArrayList<>();//添加 ...
- hashmap允许null键和值吗_hashMap底层源码浅析
来源:https://blog.csdn.net/qq_35824590/article/details/111769203 hashmap是我们经常使用的一个工具类.那么知道它的一些原理和特性吗? ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
最新文章
- Stack Overflow 上人气爆表的10个 Java 问题
- 中国男人何时回归家庭?(转)
- DSA签名算法 - Java加密与安全
- ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中
- mysql ignore caps_mysql优化之sql语句优化
- 浅谈浏览器端JavaScript跨域解决方法
- linux命令不断更新
- 详解统计套利交易系统模型
- android svg格式图片,Android工程使用SVG图片
- css位置-moz-兼容,兼容不同浏览器的CSS前缀-webkit-,-ms-,-moz-,-o-
- javaScript 生成随机字母 随机数字的5种方法
- 华为OJ平台题目:(练习用)挑7
- Egret白鹭H5开发-围住神经猫
- Mac下安装IP Message-(ipmsg)
- FBI:攻击者利用Mega.nz勒索攻击
- UVA, 10286 Trouble with a Pentagon
- 转发--目前开源数据集整理
- 深度学习(6):图像超分辨率(Image Super Resolution)重建
- CSS非布局样式和重点内容
- 如何追踪计算机IP位置,网管必备技巧:如何跟踪IP地址