gpt4 book ai didi

java - Java 中的初始 ArrayList 大小取决于内存?

转载 作者:行者123 更新时间:2023-12-03 21:47:13 26 4
gpt4 key购买 nike

我知道 ArrayList 可以包含“任意数量的项目”(只要你有足够的内存力)。但是,我想知道运行它的每台机器的列表初始大小是否不同。如果我有 8GB RAM 和 4GB RAM,这会改变初始大小吗?谢谢!

ArrayList list = new ArrayList<Integer>();

最佳答案

ArrayList 的初始大小,如果使用无参数构造函数引用 javadoc :

Constructs an empty list with an initial capacity of ten.

所以它不依赖于任何东西,它也不依赖于 RAM 大小。

然而,在后台进行了一些巧妙的优化。如果您检查 ArrayList 的 Oracle 实现,您会发现在这种情况下,将使用一个初始的空内部数组,因此在您实际添加一些元素之前不会分配任何数组到列表 - 在这种情况下,将创建一个大小为 10 的数组。

一旦您尝试添加第 11 个元素,内部数组将被“调整大小”。新的大小也取决于实现,Oracle 在 1.7.0 版本中使用 50% 的增量,因此添加第 11 个元素将导致分配一个大小为 15 的新数组。

走进幕后

好奇的可以用下面的方法查询ArrayList内部数组的大小(方案是使用反射):

public static int getCap(ArrayList<?> list) throws Exception {
Field f = list.getClass().getDeclaredField("elementData");
f.setAccessible(true);
Object[] o = (Object[]) f.get(list);
return o.length;
}

测试结果

ArrayList<String> list = new ArrayList<>();
System.out.println(getCap(list)); // Prints 0

list.add("");
System.out.println(getCap(list)); // Prints 10

for (int i = 1; i < 11; i++)
list.add("");
System.out.println(getCap(list)); // Prints 15

for (int i = 11; i < 16; i++)
list.add("");
System.out.println(getCap(list)); // Prints 22

关于java - Java 中的初始 ArrayList 大小取决于内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com