我想解决这个问题 1 - >一个 2 - >乙 3 - > C ... 26 - > ž 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);
}
}
结果为null。我不知道原因。当我用Eclipse调试时,我发现temp的大小显示为1,但是在elementData Object中显示了10个元素。第一个元素是B,其他九个是null。为什么它10而不是1?是这个原因吗? 这是调试时的变量图像 enter image description here
答案 0 :(得分:1)
为什么它是10而不是1?
因为这是ArrayList
的工作方式!
数组列表将列表存储在后备数组中(elementData
)。
使用ArrayList
创建new ArrayList()
时,初始后备数组大小将为10.(请参阅源代码;例如here。)
为什么他们这样做?
所有关于维护javadoc中所述的保证:
&#34;当元素添加到ArrayList时,其容量会自动增长。除了添加元素具有不变的摊销时间成本这一事实之外,未指定增长政策的详细信息。&#34;
实现这一目标的方法是以合理的初始容量&#34;启动支持阵列,并在填满时以指数方式增长阵列。具体细节因Java版本而异。
假设ArrayList
类可以使用与列表大小相同的后备数组。但这会带来糟糕的表现。每次向列表中添加元素时,您都需要&#34; grow&#34;支持阵列。这需要分配大小大于当前大小的新数组,然后将现有元素一次一个地复制到新数组。如果您进行数学运算,将元素附加到大小为N
的列表涉及复制N
现有元素引用...进行追加操作O(N)
。
答案 1 :(得分:0)
ArrayList
是使用数组存储元素的List
实现。
在任何时间点,List
都有size()
,即列表中的元素数量。对于ArrayList
,这些元素存储在一个数组中,length
大于或等于size()
(不能小于或等于size()
length
,对吗?)
数组ArrayList
被称为ArrayList
的容量,即size
可以处理的元素数量,而无需重新调整数组大小
调试器显示elementData
和size
数组,但只有数组的第一个ArrayList
值在&#34;列表中为#34;。
默认情况下,新ArrayList
的初始容量为10.在Java 8中,支持数组在需要时将以50%的块大小增加,即10,15 ,22,33,49,73,109,......
如果您知道自己要向 $query = "DELETE modifier_categories,modifier_items FROM modifier_categories INNER JOIN modifier_items ON
modifier_items.cat_parent_id = modifier_categories.cat_id WHERE modifier_categories.menu_item_id = $item_id ";
添加1000个元素,则可以在constructor上指定初始容量。这可以防止在添加1000个元素时不断调整阵列大小(性能提升)。