【问题标题】:Adding Strings to ArrayList<LinkedList<String>> Java将字符串添加到 ArrayList<LinkedList<String>> Java
【发布时间】: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


【解决方案1】:

在列表不够大的时候用空的LinkedLists 填充列表

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这正是我想要做的。我正在上课,创建一个是本周的作业。和一些同学交谈后,他们似乎都在构造函数中设置了一定数量的列表,我想我也会尝试一下。不过,让它在一段时间后自行增加会很酷。
    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多