2012-04-06 2 views
0

Я пытаюсь создать массив строк связанных списков в java. Затем инициализируйте все внутри массива пустой строкой. В настоящее время все они инициализируются null из-за конструктора. Это вызывает NullPointerException, когда я использую метод equals() для содержимого массива. Поэтому я хочу инициализировать их все вместо пустой строки. Как мне это сделать?Как создать массив ссылок LinkedLists и инициализировать их все в пустой строке?

private LinkedList<String>[] table; 

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

Я полагаю, вы получите больше ответов, если вы добавили какой язык вы работали в к столбу, или по крайней мере теги. – theJollySin

+0

Если на ваш вопрос был дан ответ или если он больше недействителен, отметьте «галочкой», чтобы выбрать наиболее подходящий ответ, чтобы все знали, что проблема решена. Благодарю. – wattostudios

ответ

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

Если я правильно понимаю ваш вопрос, то на мой взгляд, тем лучше, что нужно сделать было бы использовать .equals() как следующее избежать NPE, если вы хотите сравнить String с вашего LinkedList с любой заданной строки:

if("givenString".equals(strObjFromLinkedList)) { 
     //Do what you want 
} 
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, скорее всего, выполнит этот нулевой тест позади seens. Выполняя это самостоятельно, вы 1) избегаете сравнения с пустой строкой и 2) сохраняете время инициализации.

Существует более чем один способ решить проблему NPE ...

Смежные вопросы