首页 > 编程知识 正文

arraylist方法,arraylist自动扩容

时间:2023-05-03 12:30:08 阅读:147042 作者:4735

1. ArrayList() 会使用长度为零的数组

对于无参数结构,在为数组赋值之前,default capacity _ empty _ elementdata (空对象)的值将复制到element data中并执行附加操作(请参见第4点)。

默认容量_ empty _ element data空对象

跟踪add的方法在这里

//1.add(e ) publicbooleanadd ) ensurecapacityinternal ) size1;//增量模式计数! 元素数据[ size ]=e; 返回真; //2.ensurecapacityinternalprivatevoidensurecapacityinternal (int min capacity (ensureeexplicity capacity (calculate capacity ) ) 3.calculatecapacityprivatestaticintcalculatecapacity (object [ ]元素数据, intmincapacity(if ) element data==default capacity _ empty _ element data ) return math.max (default _ capacity,max ) } 2. ArrayList(int initialCapacity) 会使用指定容量的数组

3. public ArrayList(Collection? extends E c) 会使用 c 的大小作为数组容量

4. add(Object o) 首次扩容为 10,再次扩容为上次容量的 1.5 倍

//私密性staticfinalintdefault _ capacity=10;

//扩展时,扩展旧数据集的1.5倍

5. addAll(Collection c) 没有元素时,扩容为 Math.max(10, 实际元素个数),有元素时为 Math.max(原容量 1.5 倍, 实际元素个数)

接下来主要扩展这个代码。

注意:如果有元素,为什么会是Math.max (原始容量的1.5倍,实际元素的数量),主要在这里会发生一次容量扩展。 如果原始阵列长度中新添加的c的长度大于原始容量,则一次容量扩展将是原始容量的1.5倍。 原始数组的长度新添加的c的长度必须超过原始容量才能扩展

私有数据分类(对象[ ] element data,int minCapacity ) if ) element data==default capacity _ empty } }私有业务容量国际(内最小容量)业务容量(计算容量) element数据,微容量//overflow-consciouscodeif (mincapacity-element data.length0) grow ) mincapacity; } ` ` `测试代码:javapublicclassarraylistaddcapacity { publicstaticvoidmain (string [ ] args (//system.out.printint ) testAddAllGrowNotEmpty (; } /** *如何构建空* @ paramn * @ return */privatestaticlistintegerarraylistgrowrule (intn ) { ListInteger list=new ArrayList list.add (初始化; if(n=1) { init=10; list.add (初始化; }for(intI=1; i n; I ) init=(init ) 1; list.add (初始化; }返回列表; }/* * *如果没有addall (collection c )元素(/privatestaticvoidtestaddallgrowempty ) { arraylistintegerlist=new ArrayList } } list.addall (arrays.as list (1,2,3 ); list.addall (arrays.as list (1,2,3,4,5,6,7,8,9,10,11 ) ) system.out.println (长度(list ) ); }/* * *如果存在addall (collection c )元素(/privatestaticvoidtestaddallgrownotempty ) { arraylistintegerlist=new ArrayList } ) i 1; I ) ) list.add ) I; } list.addall (arrays.as list (1,2,3 ); 系统. out.println (length (list ); list.addall (arrays.as list (1,2,3,4,5,6,7 ); 系统. out.println (length (list ); }/**反射数组长度*/publicstaticintlength (arraylistintegerlist ) try ) field field=ArrayList.class.getdeclaredfield ) ') return((object[] ) field.get ) list ) ).length; }catch(exceptione ) { e.printStackTrace ); 返回0; }}来源:3359 www.bilibili.com/video/bv 15 B4 y 117 rj? p=32

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