没有合适的资源?快使用搜索试试~ 我知道了~
java -version java version “13.0.2” 2020-01-14 Java(TM) SE Runtime Environment (build 13.0.2+8) Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing) Array 数组能够做到 快速随机访问 元素,这是因为当我们创建一个数组时: var array = new Person[3]; array[0] = new Person(); 复制代码 java 首先把这个数组的引用存入栈中,然后到堆空间开辟一片 连续 的
资源详情
资源评论
资源推荐
Java 基础数据结构分析基础数据结构分析
java -version java version “13.0.2” 2020-01-14 Java(TM) SE Runtime Environment (build 13.0.2+8) Java HotSpot(TM) 64-Bit
Server VM (build 13.0.2+8, mixed mode, sharing)
Array
数组能够做到 快速随机访问快速随机访问 元素,这是因为当我们创建一个数组时:
var array = new Person[3];
array[0] = new Person();
复制代码
java 首先把这个数组的引用存入栈中,然后到堆空间开辟一片 连续连续 的地址空间,并将数组引用指向堆地址空间。
当我们访问指定的数组元素时,则只需要根据 array 的引用地址 + 下标地址, 就能快速定位元素了。
需要注意的是,数组需要连续空间的特性,让数组扩容难以实现,所以各种语言实现的数组, 数组的大小都是固定的数组的大小都是固定的 。
数组有 length 属性,这个属性记录的是数组的大小,而不是元素的个数。
List
java 中 list 常用的有 ArrayList 和 LinkedList。
ArrayList
底层基于数组 Object[] 实现,继承数组的优势,可快速随机访问元素,对于增删操作,则最坏需要 O(n) 。
我们知道 array 不能扩容,但是 ArrayList 明显可以,所以我们去看看,ArrayList ,是怎样扩容的。
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable {
private static final int DEFAULT_CAPACITY = 10;
transient Object[] elementData; // non-private to simplify nested class access
private int size;
protected transient int modCount = 0;
}
复制代码
DEFAULT_CAPACITYP : 默认的容量大小
elementData : 用来记录元素的数组,当我们初始化时,如果未指定容量,则用默认值初始化该数组,但是注意,此
时 size 的值是零
size : 记录列表中的元素个数,与数组的容量大小无关
modCount : 该属性继承自 AbstractList 。所有会修改 list 大小的操作,该值都会增加。当我们通过 iterator 遍历时, 如果该
值发生了改变(被另一个线程增加/删除了元素),就会抛出 ConcurrentModificationException
ArrayList 实现了 List / RandomAccess / Cloneable / Serializable 四个标记接口,标记接口 RandomAccess 在排序时会用到,
用来选择迭代方式(for or iterator) 。
通过源码能看到, 当我们执行 add 操作时:
public boolean add(E e) {
modCount++;
add(e, elementData, size);
weixin_38631978
- 粉丝: 3
- 资源: 933
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0