gpt4 book ai didi

java - 当我用Eclipse调试时,为什么arraylist的大小是1但elementData是10?

转载 作者:行者123 更新时间:2023-12-01 09:41:26 25 4
gpt4 key购买 nike

我想解决这个问题 1 -> 一个 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB这是我的代码

import java.util.ArrayList;
import java.util.List;

public class Solution {

public static String convertToTitle(int n) {
if(n<=0)
return null;
List temp=new ArrayList();

int i=0;
while(n!=0)
{
int residual=0;

residual=n%26;
n=n/26;
temp.add((char)(residual-1+'A'));
i++;
}
char[] temp_final=new char[i];
for(int j=0; j<i-1;j++)
temp_final[j]=(char)(temp.remove(j));
return String.valueOf(temp_final);
}

public static void main(String[] args) {

String test;
test=Solution.convertToTitle(2);
System.out.println(test);
}
}

结果为空。我不知道原因。当我用Eclipse调试时,我发现temp的大小显示1,但在elementData对象中显示10个元素。第一个元素是B,其他9个为空。为什么是 10 而不是 1?是因为这个吗?这是调试时变量的形象 enter image description here

最佳答案

Why is it 10 rather 1?

因为这就是 ArrayList 的工作方式!

数组列表将列表存储在后备数组 (elementData) 中。

当您使用 new ArrayList() 创建 ArrayList 时,初始后备数组大小将为 10。(请参阅源代码;例如 here 。)

他们为什么要这么做?

这一切都是为了维护 javadoc 中规定的保证:

"As elements are added to an ArrayList, its capacity grows automatically. The details of the growth policy are not specified beyond the fact that adding an element has constant amortized time cost."

实现此目的的方法是使用合理的“初始容量”启动后备数组,并在数组填满时以指数方式增长数组。具体细节因 Java 版本而异。

<小时/>

假设,ArrayList 类可以使用与列表大小相同的后备数组。但这会带来糟糕的性能。每次向列表中添加元素时,您都需要“增长”后备数组。这需要分配一个大小比当前大小大 1 的新数组,然后将现有元素一次复制一个到新数组。如果您进行数学计算,将一个元素追加到大小为 N 的列表中需要复制 N 个现有元素引用...使得追加操作O(N).

关于java - 当我用Eclipse调试时,为什么arraylist的大小是1但elementData是10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417784/

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