Мне дали задание создать словарь HashTable, но у меня возникли проблемы с реализацией класса Hashtable.
Мне было трудно понять, как это должно работать. Я понимаю, что благодаря моей реализации (которую я изучаю из своей книги) это в основном ArrayList из LinkedList , который должен помочь избежать столкновения. если это так, мы создаем объекты как связанные очереди, которые связаны друг с другом? ArrayList имеет установленную длину узлов, которые можно добавлять по отдельности при вызове? (возможно, глупый вопрос) потребует ли он вложенного класса узлов, и если да, будет ли он работать как стек, очередь или что-то еще полностью?
Здесь мой код до сих пор
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Map.Entry;
public class HashedDictionary<K, V> implements DictionaryInterface<K, V> {
// the dictionary
private int numberOfEntries;
private static final int DEFAULT_CAPACITY = 5;
private static final int MAX_CAPACITY = 10000;
//the hash table
private Entry<K, V>[] hashTable;
private int tableSize; //MUST BE PRIME
private static final int MAX_SIZE = 2 * MAX_CAPACITY;
private boolean integrityOK = false;
private static final double MAX_DOUBLE_FACTOR = 0.5; // Fraction of hash table
protected final Entry<K, V> AVAILABLE = new Entry<>(null, null);
public HashedDictionary() {
this(DEFAULT_CAPACITY); // call next constructor
}// end default constructor
public HashedDictionary(int defaultCapacity) {
defaultCapacity = checkCapacity(defaultCapacity);
//SET UP HASH TABLE
//INITIALIZE SIZE IF IT IS PRIME
//OTHERWISE INCREASE IT UNTIL IT IS PRIME
int tableSize = getNextPrime(defaultCapacity);
checkSize(tableSize); //CHECK THAT SIZE IS NOT TOO LARGE
@SuppressWarnings("unchecked")
Entry<K, V>[] temp = (Entry<K, V>[]) new Entry[tableSize];
hashTable = temp;
integrityOK = true;
}//end of HashDictionary Constructor
public void add(K key, V value) {
K index;
V oldValue;
if((key == null)||(value == null)) {
index = getHashIndex(key);
}
if(key == null) {
hashTable[index] = new Entry(key, value);
numberOfEntries++;
oldValue = null;
}else {
}
}
///////////////////////////////////////////////////////
private K getHashIndex(K key) {
// TODO Auto-generated method stub
return null;
}
private void checkSize(int tableSize2) {
// TODO Auto-generated method stub
}
private int getNextPrime(int defaultCapacity) {
// TODO Auto-generated method stub
return 0;
}
private int checkCapacity(int defaultCapacity) {
return 0;
}
//////////////////////////////////////////////////////
}//end of class
все конструкторы, заключенные в косые черты (///), - это то, над чем я все еще работаю, ноу меня больше было проблем с моей функцией добавления. Я, честно говоря, потерян. вторая книга if описывает «если ключ не найден» . не так ли, если key = null, и если да, то это просто повторение первого оператора if? я стою на месте, как идти вперед, завершая этот метод добавления.
TL: DR : я не получаю HashTable Dictionaries и не могу понять, как заставить работать мое предложение add