deepeshdm3434 Ответов: 1

Как установить коэффициент загрузки для hashmap ?


Ниже приведена простая реализация Hashmap , которую я попробовал, так как сейчас я использую массив фиксированного размера.
Как установить коэффициент нагрузки и увеличить емкость массива после достижения коэффициента нагрузки ?
Что еще более важно , как мы узнаем , прошел ли массив коэффициент загрузки, я имею в виду, что ключи будут случайными числами от 0 до n, так как же мы узнаем, что в массиве больше не осталось ведер ?



public class demo {

    public static void main(String[] args) {

        Hashmap map = new Hashmap(60);
        map.put(4, "Deepeshh");
        map.put(4, "Deepesh");
        map.put(5, "Kiran");
        map.put(6, "Aryan");
        map.put(40, "ABC");

        map.get(4);
        map.get(40);

    }


}







public class Hashmap {

    Node[] container_array;

    //Current size is fixed. we can use Load factor to
    // decide when to increase the size of the array.
    Hashmap(int size) {
        this.container_array = new Node[size];
    }


    static class Node {
        int key;
        int hash;
        String value;
        Node next;

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


    void put(int key, String value) {

        int hash = Integer.hashCode(key);
        int index = hash % container_array.length - 1;

        if (container_array[index] == null) {

            Node newNode = new Node(key, value, hash);

            container_array[index] = newNode;
        } else if (container_array[index] != null) {


            Node temp = container_array[index];

            //if the user is trying to update or
            // change the value at a existing key.
            if (temp.key == key && temp.hash == hash) {
                temp.value = value;
            } else {

                //if there is hash collision & the index is already having a Node.
                while (temp.next != null) {
                    temp = temp.next;
                }

                temp.next = new Node(key, value, hash);
            }

        }

    }


    void get(int key) {
        int hash = Integer.hashCode(key);
        int index = hash % container_array.length - 1;

        if (container_array[index] == null) {
            System.out.println("Nothing exists for this key !");
        } else if (container_array[index] != null) {

            Node temp = container_array[index];

            while (temp != null) {

                if (temp.key == key && temp.hash == hash) {
                    System.out.println(temp.value);
                    return;
                }

                temp = temp.next;
            }

        }
    }


}


Что я уже пробовал:

Пробовал Гугл и другие интернет-ресурсы.

1 Ответов

Рейтинг:
1

CPallini

Коэффициент нагрузки должен быть свойством вашего класса. Вы можете установить для него постоянное значение или разрешить пользователю изменять его.
Вы можете легко отслеживать количество записей в вашей хэш-таблице в put метод. Когда entries > (load_factor * size) затем вы должны изменить размер внутреннего массива.