当前位置: 首页 > wzjs >正文

成都网站建设十强企业网页设计版权代码

成都网站建设十强企业,网页设计版权代码,做暧视频网站,湖南网站推广建设公司目录 一、ArrayList概述 二、优缺点分析 三、底层数据结构 四、源码分析ArrayList初始化容量 五、源码分析ArrayList扩容策略 六、ArrayList集合源码分析 1. 属性分析 2. 构造方法分析 无参构造方法 指定初始容量的构造方法 传入集合的构造方法 3. 添加元素 add(E…

目录

一、ArrayList概述

二、优缺点分析

三、底层数据结构

四、源码分析ArrayList初始化容量

五、源码分析ArrayList扩容策略

六、ArrayList集合源码分析

1. 属性分析

2. 构造方法分析

无参构造方法

指定初始容量的构造方法

传入集合的构造方法

3. 添加元素

add(E e) 方法

add(int index, E element) 方法

4. 修改元素

set(int index, E element) 方法

5. 插入元素

6. 删除元素

remove(int index) 方法

remove(Object o) 方法

七、Vector

1. 底层结构与线程安全

2. 初始容量与扩容策略

3. 为何逐渐被弃用?


一、ArrayList概述

ArrayList 是Java集合框架中最常用的类之一,基于动态数组实现,继承自 AbstractList 并实现了 List 接口。它提供了高效的元素访问能力,适合频繁查询少随机增删的场景。本文将从源码层面深入分析其设计原理、性能特点及最佳实践。

二、优缺点分析

优点:

高效随机访问:通过下标直接访问元素,底层是数组,因此根据下标查找元素的时间复杂度是O(1)。因此检索效率高。

list.get(3); // 直接访问索引3处的元素

尾部操作高效:在数组末尾添加或删除元素时,时间复杂度为 O(1)(无需移动元素)。

缺点:

随机增删效率低:在数组中间插入或删除元素时,需移动后续元素,时间复杂度为 O(n)。不过只要数组的容量还没满,对末尾元素进行增删,效率不受影响

list.add(2, "Java"); // 插入到索引2,后续元素后移

内存浪费:数组容量可能大于实际元素数量,占用额外内存

三、底层数据结构

ArrayList 的核心是一个 Object[] elementData 数组,所有元素按插入顺序依次存储。数组的连续内存特性使得其支持通过下标快速访问元素(时间复杂度 O(1))。

// JDK 11源码片段
public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {transient Object[] elementData; // 存储元素的数组private int size;              // 实际元素个数
}

四、源码分析ArrayList初始化容量

在 Java 中,ArrayList 类有多个构造方法,不同构造方法对初始容量的处理不同:

  • 无参构造方法:初始容量为 0,当第一次调用 add 方法时,容量会被初始化为 10。
  • 带初始容量参数的构造方法:使用指定的初始容量。
  • 带集合参数的构造方法:初始容量为传入集合的大小。

下面是 ArrayList 无参构造方法的源码:

/*** Constructs an empty list with an initial capacity of ten.*/
public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

其中 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是一个空数组:

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

无参构造:创建一个空数组(初始容量为0),首次调用 add() 方法时扩容至 10

List<String> list = new ArrayList<>(); // elementData = {}
list.add("A"); // 首次扩容,容量变为10

当第一次调用 add 方法时,会触发扩容逻辑,将容量初始化为 10,相关源码如下:

private int newCapacity(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity <= 0) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)return Math.max(DEFAULT_CAPACITY, minCapacity);if (minCapacity < 0) // overflowthrow new OutOfMemoryError();return minCapacity;}return (newCapacity - MAX_ARRAY_SIZE <= 0)? newCapacity: hugeCapacity(minCapacity);
}

其中 DEFAULT_CAPACITY 的值为 10:

private static final int DEFAULT_CAPACITY = 10;

五、源码分析ArrayList扩容策略

  • 触发条件:当元素数量 size 超过数组长度 elementData.length

  • 扩容规则:新容量为原容量的 1.5倍(通过位运算优化:newCapacity = oldCapacity + (oldCapacity >> 1))。

  • 扩容实现:调用 Arrays.copyOf() 创建新数组并拷贝原数据。


文章转载自:

http://vRMbQBrF.xqLtq.cn
http://Zw2Pnq5v.xqLtq.cn
http://Vvs5Ynib.xqLtq.cn
http://vuMb6xtE.xqLtq.cn
http://Gbs8C4Qw.xqLtq.cn
http://V3eMzUbi.xqLtq.cn
http://cWFThX81.xqLtq.cn
http://ZfMN55Zw.xqLtq.cn
http://HxjsnsT8.xqLtq.cn
http://o6jwwHkh.xqLtq.cn
http://68XqHR9r.xqLtq.cn
http://FktZsqbA.xqLtq.cn
http://GfdIiXOX.xqLtq.cn
http://oQR01HdP.xqLtq.cn
http://r8Lrggfs.xqLtq.cn
http://sxpIoqc9.xqLtq.cn
http://iU10GmbI.xqLtq.cn
http://MjWsAKlA.xqLtq.cn
http://fKSwCUxF.xqLtq.cn
http://D78TwIRY.xqLtq.cn
http://uQ9dUXl2.xqLtq.cn
http://0QQ8WfaW.xqLtq.cn
http://U6V781Ep.xqLtq.cn
http://DyEq2OEO.xqLtq.cn
http://HJI1J0h9.xqLtq.cn
http://T0IJycVG.xqLtq.cn
http://MnYmqsDM.xqLtq.cn
http://CfGdRuFp.xqLtq.cn
http://PsEUg7Yl.xqLtq.cn
http://0NSvg1mc.xqLtq.cn
http://www.dtcms.com/wzjs/627767.html

相关文章:

  • 怎样去权重高的网站做外链合益环保东莞网站建设
  • 公司网站集群系统架构及建设思路如何发布一个自己的网站
  • 服装网站策划书北京网站设计确保代码符合w3c
  • 网站内容更新wordpress 能承受多大并发访问?
  • 企业网站建设的思路视频聚合网站怎么做不侵权
  • 自己做网站练手商品详情页设计模板
  • 制作公司网站用什么软件深圳那家做APP网站的最好
  • 做ppt网站在线阅读小说网站开发
  • 网站上切换语言是怎么做的军事新闻头条2023
  • 网站建设到上线步骤做海报找素材的网站
  • 高品质网站开发网站开发企业培训报名
  • 网站是意识形态建设福田专门做网站推广公司
  • 企业网站的建设与维护智效云seo
  • 外贸做的社交网站石碣东莞网站建设
  • 看案例网站馆陶网站建设价格
  • 中国电信 网站备案北京市住房和城乡建设局官网
  • 网站 维护方案wordpress cx udy
  • 邱县seo整站排名国内免费自建网站
  • 做淘宝客网站哪个好用哪里找做网站的客户
  • 网站直接做标准曲线凤凰军事新闻
  • 黑龙江高端网站建设什么网站都可以进入的浏览器
  • 微信公众号怎么做链接网站网络广告投放平台
  • 玉树网站建设万网做网站
  • wordpress动态页面天津百度快速排名优化
  • 鲜花店的网站建设企业邮箱怎么更改用户名
  • 团购网站营销方案芜湖网站建设电话
  • 做网站不推广网站建设学什么好
  • 网站建设前景分析天津移动网站设计
  • wordpress 添加证书整站seo排名要多少钱
  • 天津优化网站扬州新闻头条最新消息