public class HashTable {


    /* Class containing next node and key and name value*/
    class Node { 
        private long key;

        public long getKey() {
            return key;
        }

        public void setKey(long key) {
            this.key = key;
        }

        private String value;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        Node next; 

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }

        Node(long key, String value) {
            this.key = key;
            this.value = value;
            next = null;
        }
    } 

Nie jestem pewien, czy powinienem tworzyć Node[] size w ten sposób.

Node[] size;

    //The hash table array
    Node[] array = null;
    //hash table size. We typically choose m to be a power of 2
    int m = 0;

    // Constructor 
    HashTable(int size) {  
        m = size;
        array = new Node[size];  
    }

    HashTable() {  
        this(100);
    } 

    // Search for a given key in the hashtable
    // Note: you need to use hashFunction(long key) to determine the slot (array index) you will search in
    public Node search(long key) 
    { 
        Node node = null;
        /**
         * TODO
         */
        int hash = hashFunction(key);
        Node list = size[hash];
        while(list!=null) {
            if(list.getKey() == key) {
                return list;
            }
            else {
                list = list.getNext();
            }
        }
        return node;
    }

Moja funkcja hashFunction (długi klucz) działa, ale mam problem z implementacją logiki funkcji wyszukiwania. Nie jestem pewien, co robię źle. Czy ktoś może pomóc. Moja implementacja wyszukiwarki zaczyna się od public Node search(long key).

0
Sushil Karki 20 listopad 2019, 10:11

1 odpowiedź

Używasz węzła list = size[hash]; w wyszukiwaniu, ale jak widzę w konstruktorze parametrów, używasz array = new Node[size]; do inicjalizacji.

Więc spróbuj zamienić size[hash] na array[hash].

W Twoim wklejonym kodzie nie widziałem zastosowania deklaracji Node []size. Możesz usunąć zmienną tablicową rozmiaru.

0
Harsh Mishra 20 listopad 2019, 10:22
Myślę, że nie z podanego kodu. Czy poradziłeś sobie ze scenariuszem kolizji? Co się stanie, jeśli haszujesz metodę, aby zwrócić ten sam kod skrótu dla dwóch różnych wartości. W jaki sposób dodajesz i otrzymujesz z tego? Po prostu nie mogę powiedzieć, że wdrożenie jest właściwe.
 – 
Harsh Mishra
20 listopad 2019, 10:29
Dla początkowego innego elementu, to by zadziałało. Potrzebuję pełnej implementacji, aby sprawdzić dalej
 – 
Harsh Mishra
20 listopad 2019, 10:31