Я пытаюсь реализовать отдельную цепочку хеш-таблицы в Java, и я столкнулся с classcastexception.Листинг родовой коллекции массив
так вот что я сделал:
private LinkedList<Entry<K,V>>[] bucketArray;
Этот массив будет держать все LinkedList, который будет служить в качестве цепей. Существует также внутренний класс Entry в классе HashTable, каждый из которых содержит ключевой ключ K, а также V-значение.
В застройщик за столом я на самом деле initialze массив:
public HashTable(int capacity, int prime) {
this.capacity = capacity;
this.prime = prime;
bucketArray = (LinkedList<Entry<K, V>>[]) new Object[this.capacity];
}
Так премьер просто Gonne использоваться для расчета сжатого ключа, емкость для размера массива. но поскольку я запускаю этот jvm, вы выбрасываете classcastexception.
Если я изменю новый объект в новый LinkedList [this.capacity], то у меня есть исключение NullPointer в моем методе пут, который выглядит следующим образом:
public void put(K k, V v) {
int h = hashValue(k);
bucketArray[h].add(new Entry<K, V>(k, v));
}
ради простоты методы всегда возвращает значение хэша 1 .
Как это можно было бы сделать правильно?
Массивы инициализируются нулевыми элементами по умолчанию. Вы должны проверить, содержит ли ваш bucketArray [h] значение null и инициализирует этот элемент новым экземпляром LinkedList. Что-то вроде if (buckerArray [h] == null) {buckerArray [h] = new LinkedList>(); } перед bucketArray [h] .add (new Entry (k, v)) –
vbezhenar