我在将String添加到ArrayList>时遇到问题。宣布
ArrayList<LinkedList<String>> table = new ArrayList<>();
在类的构造函数中,我调用了ArrayLists ensureCapacity方法,这似乎没有达到我的期望。我以为它会增加其中的LinkedList的插槽,但它只是保持为空。
当我尝试调用我的add方法时:
public boolean add(String s)
{
boolean wanted = true;
if(false)
{
wanted = false;
}
int index = Math.abs(s.hashCode() % table.size());
table.ensureCapacity(index);
table.get(index).addFirst(s);
return wanted;
}
由于表大小没有因ensureCapacity而增加,因此我得到java.lang.ArithmeticException:零。 我该如何解决这个问题? 我在脑海中描绘了这个,因为ArrayList是表中的第一列,而LinkedLists是行。因此,ArrayList中的每个插槽都引用了一个LinkedList,其中将保存字符串。但由于ArrayList在启动时为空,我无法使用ensureCapacity增加并且在add方法中使用%运算符,因此它不会自行增加。
答案 0 :(得分:1)
ensureCapacity()
可以调整ArrayList的后备数组的大小,但不会更改实际存储在List中的元素数。因此,它不会影响table.size()
的返回值。
table.get(index)
将返回null,除非您向列表中添加至少index+
个元素。
看起来你正在尝试实现与HashMap
类似的东西(虽然HashMap
使用数组而不是ArrayList)。
您可以依赖table.size()
的唯一方法是将n
空LinkedList
添加到table
。然后table.size()
将返回n
,这将是您桌子的大小。
答案 1 :(得分:1)
填充列表时,空格LinkedList
while (table.size() < EXPECTED_SIZE) {
table.add(new LinkedList<String>();
}