0

我正在尝试在 java 中创建一个链表的字符串数组。然后将数组中的所有内容初始化为空字符串。null目前,由于构造函数,它们都被初始化。NullPointerException当我equals()对数组的内容使用方法时,这会导致。所以我想将它们全部初始化为一个空字符串。我该怎么做?

    private LinkedList<String>[] table;

    public Hashtable (int capacity, String hashFn) {
        table = new LinkedList[capacity]
        hashFn = hashFn;
    }
4

3 回答 3

1

我认为你需要循环并将每个项目设置为一个空字符串,就像这样......

private LinkedList<String>[] table;

public Hashtable (int capacity, String hashFn) {
  table = new LinkedList[capacity];
  String emptyString = "";
  for (int i=0;i<capacity,i++){
    table.add(emptyString);
    }
  }

我从来没有尝试过做你想做的事,但我找不到任何快速的方法来做。

当然,如果你把它变成 aString[] array而不是 a LinkedList<String>[] array,你可以简单地调用java.util.Arrays.fill(array,"");

于 2012-04-06T05:38:23.017 回答
1

如果我正确理解了您的问题,那么在我看来,如果您想将您的问题与任何给定的字符串进行比较,最好的做法是使用.equals()以下内容来避免:NPEStringLinkedList

if("givenString".equals(strObjFromLinkedList)) {
        //Do what you want
}
于 2012-04-06T06:14:28.533 回答
0

直接的答案是Collections该类提供了一种nCopies方法,您可以使用如下方法:

    List<String> l = new LinkedList<String>(Collections.nCopies(capacity, ""));

以避免编写显式for循环。不过,for循环会更有效。


但我真正想说的是,这LinkedList是实现主哈希表的错误选择。类似于get(int)和的操作set(int, T)O(N)针对链表的。您应该使用ArrayList<String>,或者更好的是String[]. 它们具有O(1)获取和设置元素的操作。最重要的是,它们使用的内存要少得多。

null此外,与填充空字符串相比,您最好进行显式测试。实际上,无论如何,JVM 很可能会在所见的情况下执行该空测试。通过自己做,您 1) 避免与空字符串进行比较,以及 2) 节省初始化时间。

解决 NPE 问题的方法不止一种……

于 2012-04-07T04:08:20.437 回答