Создание словаря HashTable в Java - PullRequest
0 голосов
/ 04 ноября 2019

Мне дали задание создать словарь HashTable, но у меня возникли проблемы с реализацией класса Hashtable.

  1. Мне было трудно понять, как это должно работать. Я понимаю, что благодаря моей реализации (которую я изучаю из своей книги) это в основном ArrayList из LinkedList , который должен помочь избежать столкновения. если это так, мы создаем объекты как связанные очереди, которые связаны друг с другом? ArrayList имеет установленную длину узлов, которые можно добавлять по отдельности при вызове? (возможно, глупый вопрос) потребует ли он вложенного класса узлов, и если да, будет ли он работать как стек, очередь или что-то еще полностью?

  2. Здесь мой код до сих пор


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...