将字符串添加到ArrayList <linkedlist <string>&gt;爪哇</链表<字符串>

时间:2015-02-09 11:29:14

标签: java string list arraylist hashtable

我在将String添加到ArrayList&gt;时遇到问题。宣布

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方法中使用%运算符,因此它不会自行增加。

2 个答案:

答案 0 :(得分:1)

ensureCapacity()可以调整ArrayList的后备数组的大小,但不会更改实际存储在List中的元素数。因此,它不会影响table.size()的返回值。

table.get(index)将返回null,除非您向列表中添加至少index+个元素。

看起来你正在尝试实现与HashMap类似的东西(虽然HashMap使用数组而不是ArrayList)。

您可以依赖table.size()的唯一方法是将nLinkedList添加到table。然后table.size()将返回n,这将是您桌子的大小。

答案 1 :(得分:1)

填充列表时,空格LinkedList

不够大
while (table.size() < EXPECTED_SIZE) {
 table.add(new LinkedList<String>();
}