【发布时间】:2015-04-09 03:05:52
【问题描述】:
我在将字符串添加到 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,String 将保存在其中。但由于 ArrayList 在开始时为空,我无法使用 ensureCapacity 增加,并且在 add 方法中使用 % 运算符,它不会自行增加。
【问题讨论】:
-
size() 返回数组列表中的项目数,而不是容量。这将是第一次为 0,因此 MOD (%) 操作抛出除以零
-
我会假设
table.size()是 0 并且给你你看到的异常。可能会写上if(table.size() == 0) { /*increase table size*/ } -
啊哈!我认为容量与@Bret 的桌子大小相同。
-
是的 table.size() 是 0,我试试 @ug_ 但是如果我将表大小增加得太少会发生什么?我想保持我的链表简短,有没有办法在链表开始变大时不断增加大小?
标签: java string list arraylist hashtable