Java ArrayList 长度和大小

Java技术 潘老师 9个月前 (08-08) 421 ℃ (0) 扫码查看

Java 中的ArrayList表示一个可调整大小的对象数组,它允许我们添加、删除、查找、排序和替换元素。在内部,arraylist 维护一个固定大小的数组来添加/维护对象,并且其所有方法都访问此后备数组以进行各自的操作。

ArrayList不公开公开后备数组的长度,并且只能使用size()方法检索存储元素的数量。

1.ArrayList的内部实现

在内部,ArrayList类是使用数组(也称为支持数组)实现的。从ArrayList添加或删除的元素实际上是在后备数组中修改的。

public class ArrayList<E> ... {
  transient Object[] elementData;   //backing array
  private int size;                 //arraylist size
  //...
}

当我们将对象添加到数组列表时,它们将存储在支持数组中。使用size属性跟踪存储在数组中的元素数量。

2.ArrayList大小

ArrayList的大小是指ArrayList中存储的元素(包括值)的数量。

  • 当我们在数组列表中的任意位置添加元素时,大小会增加 1。
  • 当我们删除一个元素时,大小会减 1。
  • 当我们替换一个元素时,大小不会改变。
  • 当我们清除 arraylist 时,大小会重置为 0。

我们用一个例子来验证一下上面的情况。我们将初始化一个空数组列表,并执行一些添加/删除/清除操作。每次操作后,我们都会检查 arraylist 的大小。

ArrayList<Integer> arraylist = new ArrayList<>();
Assertions.assertEquals(0, arraylist.size()); //Initial size = 0
arraylist.add(1001);
Assertions.assertEquals(1, arraylist.size()); //Add increments the size by 1
arraylist.add(1002);
Assertions.assertEquals(2, arraylist.size()); //Add increments the size by 1
arraylist.set(0, 1000);
Assertions.assertEquals(2, arraylist.size()); //replace does not change the size
arraylist.remove(1002);
Assertions.assertEquals(1, arraylist.size()); //remove decrements the size by 1
arraylist.clear();
Assertions.assertEquals(0, arraylist.size()); //clear resets the size to 0

3.ArrayList长度

数组列表的长度是支持数组的长度。但是,由于ArrayList类不公开初始容量,因此无法使用公共 API 来验证长度。

请注意,arraylist 的默认初始容量为 10,这将创建一个长度为 10 的空后备数组。因此,使用默认无参数构造函数创建的空 arraylist 始终具有长度为 10 的后备数组。我们可以提供自定义初始容量(或数组长度)作为构造函数参数。

ArrayList<Integer> arraylist = new ArrayList<>();  // backing array of length 10
ArrayList<Integer> arraylist = new ArrayList<>(64);  // backing array of length 64

4. ArrayList trimToSize()

一个有趣的方法trimToSize() 使ArrayList实例的长度成为列表的当前大小。应用程序可以使用此操作来最小化ArrayList实例的存储空间。

修剪操作使用'size'属性创建一个新的后备数组并将元素存储在数组中。在新的支持数组中,所有数组索引都存储一个值。请注意,有效值也可以为null

arraylist.trimToSize();

5. 结论

为了简单起见,Java ArrayList 类不会公开支持数组的长度,而仅使用 size() 方法公开其中当前存储的元素的数量。尽管如此,了解长度的概念还是有好处的,这样当后备数组包含足够的索引而不指向任何值时,我们就可以使用trimToSize()方法。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/7793.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】