首页 > 编程知识 正文

arraylist扩容因子,arraylist数据结构

时间:2023-05-06 19:13:53 阅读:147037 作者:2446

在ArrayList扩展原理面试中,一个常见的问题是List的扩展机制。 他如何进行扩张,每个人都可以回答。 下面是数组,复制并扩展数组,但再具体一点说,大家都不知道该怎么说。 不看源代码就说这么多确实一样,但是看源代码可以说更多。 更详细地说,更具体地说,本篇主要看的是jdk1.8

1 ) List扩展实现步骤总体分为两个阶段。 1、扩张

将原始数组复制到具有更大内存区域的另一个数组中

2、添加元素

向扩展后的数组中添加新元素

2 )在源代码分析中,粘贴ArrayList中定义的一些属性有助于执行以下源代码分析

在分析之前,让我们先看看ArrayList的两种结构方法

ArrayList () arraylist(intinitialcapacity )没有参与结构。

公共阵列((this.element data=default capacity _ empty _ element data; )有参考结构:

公共阵列(intinitial capacity ) if ) initialcapacity0) this.element data=new object [ initial capacity ]; } else if (初始容量==0) this.element data=empty _ element data; } else { thrownewillegalargumentexception (illegal capacity 3360 ) initialcapacity ); }在无参数结构中,在使用无参数结构创建对象时,可以看到创建了长度为0的空数组

在参数结构中,如果传递的参数是正整数,则根据传递的参数确定创建的数组的大小。 否则,将是例外

接下来,让我们来看看扩展。 扩展的方法是添加(e )

看吧,其实添加方法是两步,第一步:增加长度,第二步:向数组中添加元素,第二步什么也不说,让我们来看看如何增加内部空间(int min capacity )的长度

这个地方表示,在添加时,如果远程排列为空,则直接给出10的长度,否则加入1

f (最大容量-元素数据.长度0 ) grow )最大容量; 通过这个地方真的是增加长度,如果需要的长度大于原始阵列的长度,就需要增加容量,反之就不需要增加容量

这个地方请注意这一句话

intnewcapacity=old capacity (old capacity 1;

除了oldCapacity 1右移运算符的原始长度的一半之外,它还将增加原始长度,即每次放大时原始长度的1.5倍

以前都是决定新数组的长度,但决定后将旧数组复制到新数组中,数组的扩展就结束了

这些都是ArrayList扩展的第一步,第二步什么也不说。 就是在数组的末尾添加需要添加的元素

测试:

publicstaticvoidmain (string [ ] args ) long start1=system.current time millis ); 列表integer lst1=new ArrayList (; for(intI=0; i 100000; I ) ) lst1.add ) I; } system.out.println (system.current time millis (-start1); long start2=system.current time millis (; listintegerlst2=new ArrayList (100000; for(intI=0; i 100000; I ) lst2.add(I ); } system.out.println (system.current time millis (-start2); }结果:

10

4

处理完成的with exit代码0

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。