锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Java—ArrayList(扩容机制)

时间:2023-07-01 04:37:00 扩口连接热浸塑电缆穿线钢管

对于ArrayList集合可能大家都不陌生,但是集合可能大家都不陌生。ArrayList集合的扩容机制大家是否了解呢?我们今天着重来看看

目录

什么场景适合?

ArrayList特点

实战演练

ArrayList扩容机制

综上所述,ArrayList的特点如下


什么场景适合?

检索更多的场景

ArrayList特点

1、ArrayList集合底层采用数据结构Object类型

2、ArrayList默认初始容量为10,扩容因子为1.5

3.建议给出估计的初始容量,减少数组扩容的次数。ArrayList集合更重要的优化策略.由于原始数组中的数据需要在扩展容量的同时复制到新数组中,但如果需要插入大量数据,赋值数组的形式效率很低,因此在大多数情况下,会使用带参结构函数进入估计容量,并提前定义容量。

4、ArrayList非线程安全

实战演练

import java.util.ArrayList; import java.util.List;  public class ListTest { public static void main(String[] args) {     List list = new ArrayList();     list.add("b");//索引下标0     list.add("d");     list.add("c");     list.add("a");     list.add("d"); //允许使用重复元素      System.out.println(list);  //输出结果:[b, d, c, a, d]     System.out.println(list.get(2));  //输出指定标的元素,输出结果:c      list.add(1,"f");///在指定索引的标准位置添加元素     System.out.println(list); ///输出结果:[b, f, d, c, a, d],下标索引位置的元素自动向后移动      List a = new ArrayList();     a.add("123");     a.add("456");     list.addAll(2,a);  ///将集合插入指定索引下标的位置     System.out.println(list);///输出结果:[b, f, 123, 456, d, c, a, d]      ///在集合中首次出现的索引下获取指定元素     System.out.println(list.indexOf("d")); ///输出结果:4     ///获集合中最后一次出现的索引下获取指定元素     System.out.println(list.lastIndexOf("d"));///输出结果:7      list.remove(2);  ///在指定索引下标记去除元素     System.out.println(list);  ///输出结果:[b, f, 456, d, c, a, d]      list.set(1,"ff"); ///在指定索引下标记修改元素     System.out.println(list); ///输出结果:[b, ff, 456, d, c, a, d]      ///根据索引下标的起始位置截取一段元素,形成新的集合。截取时,包括起始索引,不包括结束时的索引     List sublist= list.subList(2,4);     System.out.println(sublist);//输出结果:[456, d]      System.out.println(list.size()     } }

import java.util.LinkedList; import java.util.List;  public class ListTest { public static void main(String[] args){     List l1 = new LinkedList();     for(int i = 0;i<=5;i  ){     l1.add("a" i);     }      System.out.print(l1);     l1.add(3,"a100");     System.out.println(l1);     l1.set(6,"a200");     System.out.println(l1);     System.out.print((String)l1.get(2) " ");     System.out.println(l1.indexOf("a3"));     l1.remove(1);     System.out.println(l1);     } }

输出结果:

[a0,a1,a2,a3,a4,a5]

[a0,a1,a2,a100,a3,a4,a5]

[a0,a1,a2,a100,a3,a4,a200]

a2 4

[a0,a2,a100,a3,a4,a200]


ArrayList扩容机制

ArrayList使用前不需要像数组一样提前定义大小空间,容量随使用时自动增加,为什么要使用?ArrayList的add当添加元素时,底部还需要判断集合的容量是否可以放下要添加的元素?不要直接定义固定尺寸吗?

add添加方法分为三个步骤:

①、判断集合容量是否符合添加元素

②、添加元素

③、集合长度 1

解答:

用户不需要提前定义尺寸,因为默认情况下已经定义了尺寸。事实上,有一个边界值,而不是无限增长。由于底层有扩展因子(扩展因子为1.5)当数量达到数组的百分之多时,容量就会扩大。ArrayList默认初始尺寸为10

问题:你可以思考为什么ArrayList底层扩容因子是1.5?为什么不是1.32.4……

综上所述,ArrayList的特点如下

1、ArrayList集合底层采用数据结构Object类型

2、ArrayList默认初始容量为10,扩容因子为1.5

3.建议给出估计的初始容量,减少数组扩容的次数。ArrayList集合更重要的优化策略.由于原始数组中的数据需要在扩展容量的同时复制到新数组中,但如果需要插入大量数据,赋值数组的形式效率很低,因此在大多数情况下,会使用带参结构函数进入估计容量,并提前定义容量。

4、ArrayList非线程安全

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章