将字符串添加到 ArrayList<LinkedList<String>> Java

Adding Strings to ArrayList<LinkedList<String>> Java

我在将字符串添加到 ArrayList> 时遇到问题。已声明

ArrayList<LinkedList<String>> table = new ArrayList<>();

在 class 的构造函数中,我调用了 ArrayLists ensureCapacity 方法,这似乎没有达到我的预期。我以为它会增加其中 LinkedList 的插槽,但它仍然是空的。

当我尝试调用我的添加方法时:

    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 没有增加 table 大小,我得到 java.lang.ArithmeticException: 为零。 我该如何解决这个问题? 我在脑海中将其描绘为 ArrayList 是 table 中的第一列,而 LinkedLists 是行。因此 ArrayList 中的每个插槽都引用一个 LinkedList,其中将保存字符串。但是由于 ArrayList 在开始时是空的,我无法使用 ensureCapacity 增加并且在 add 方法中使用 % 运算符它不会增加自身。

ensureCapacity() 可能会调整 ArrayList 的支持数组的大小,但不会改变实际存储在列表中的元素数。因此,它不会影响 table.size() 的 return 值。

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

看起来您正在尝试实现类似于 HashMap 的东西(尽管 HashMap 使用数组而不是 ArrayList)。

您可以依赖 table.size() 的唯一方法是将 n 个空的 LinkedList 添加到 table。然后 table.size() 将 return n,这就是您的 table 的大小。

当列表不够大时,用空 LinkedLists

填充列表
while (table.size() < EXPECTED_SIZE) {
 table.add(new LinkedList<String>();
}