我正在尝试在java中创建一个链表的字符串数组。然后将数组内的所有内容初始化为空字符串。目前,由于构造函数,它们都使用null
初始化。当我对数组的内容使用NullPointerException
方法时,这会导致equals()
。所以我想将它们全部初始化为空字符串。我该怎么做?
private LinkedList<String>[] table;
public Hashtable (int capacity, String hashFn) {
table = new LinkedList[capacity]
hashFn = hashFn;
}
答案 0 :(得分: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);
}
}
我从未试图做你想做的事,但我找不到任何快速的方法去做。
当然,如果您将其设为String[] array
而不是LinkedList<String>[] array
,则只需拨打java.util.Arrays.fill(array,"");
答案 1 :(得分:1)
如果我正确理解了您的问题,那么在我看来,如果您想要比较.equals()
来NPE
,那么更好的办法就是使用String
来避免LinkedList
{1}}任何给定的字符串:
if("givenString".equals(strObjFromLinkedList)) {
//Do what you want
}
答案 2 :(得分:0)
直接的答案是Collections
类提供了nCopies
方法,你可以使用这样的方法:
List<String> l = new LinkedList<String>(Collections.nCopies(capacity, ""));
避免编写显式的for
循环。但for
循环会更有效。
但我真正想说的是LinkedList
是实现主哈希表的BAD选择。对于链接列表,get(int)
和set(int, T)
等操作为O(N)
。您应该使用ArrayList<String>
,或者更好的是String[]
。它们具有O(1)
个用于获取和设置元素的操作。最重要的是,他们使用的内存要少得多。
此外,您最好对null
进行显式测试,而不是填充空字符串。实际上,无论如何,JVM很可能会在seens后面执行null测试。通过自己动手,你1)避免与空字符串比较,2)节省初始化时间。
解决NPE问题的方法不止一种......