wordpress适合电影网站的模板下载,e福州怎么交医保,WordPress设置页面宽度占满,可以直接进入的正能量网站老狼系列文章目录 1.集合-Collection-CSDN博客 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录
系列文章目录
前言
一 . 什么是ArrayList?
二 . ArrayList集合底层原理
总结 前言 大家好,今天给大家讲一下Arra…系列文章目录 1.集合-Collection-CSDN博客 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录
系列文章目录
前言
一 . 什么是ArrayList?
二 . ArrayList集合底层原理
总结 前言 大家好,今天给大家讲一下ArrayList底层的扩容机制 一 . 什么是ArrayList?
ArrayList 是 List 接口的实现类之一它是基于动态数组实现的可以根据需要自动调整大小。ArrayList 具有以下特点
有序性ArrayList 中的元素是有序的可以根据插入的顺序进行访问和操作。可重复性ArrayList 允许存储重复的元素。动态调整大小ArrayList 内部使用数组来存储元素当元素数量超过当前数组容量时ArrayList 会自动进行扩容以容纳更多的元素。随机访问由于 ArrayList 使用数组来存储元素因此可以通过索引来直接访问元素具有较快的随机访问速度。线程不安全ArrayList 不是线程安全的如果在多个线程同时对 ArrayList 进行修改操作可能会导致不可预期的结果。
拓展: ArrayList和vector的区别
本质上两者没什么区别,不同的是vector是线程安全的,Arraylist是线程不安全的,两者在扩容时,扩容的空间不同,其余的两者完全一致,只不过vector使用的很少,了解即可
在ArrayList中我们没有额外的方法需要学习,它的方法直接继承自List接口 二 . ArrayList集合底层原理 public static void main(String[] args) {ArrayListString list new ArrayList();list.add(aaa);list.add(bbb);list.add(ccc);
} 上面代码中利用无参构造方法创建ArrayList的对象,底层会创建一个默认长度为零的数组element 在添加第一个元素的时候,sizeemlment.length0 会调用扩容方法grow 说到这了,给大家解释一下size 私有化成员变量,没有初始化,默认值为0
size有两个含义: 1. 表示当前数组中元素的个数 2. 表示下一个元素的存入位置
ok 我们来看一下grow方法 如果容量不足,且不是第一次扩容
就会调用newLength方法计算扩容后的容量的大小 这个时候可能就会有人提出疑问了? 我一个一个元素的添加怎么可能会让minGrowthprefGrowth?
其实Arraylist集合中还有一个addAll方法
ArrayList 类提供了 addAll(Collection? extends E c) 方法用于将指定集合中的所有元素添加到列表的末尾。该方法的参数是一个集合可以是 ArrayList、LinkedList 或其他实现了 Collection 接口的类的实例。
这样一来minGrowth是不是就有可能比prefGrowth大了
newlength方法返回值处的三目运算符本质上就是去判断prefLength是否越界(int的最大值),了解即可。
总结 总结
大家好好理解下一篇博客见。