B11

package sk.upjs.paz.cvicenieHash;

import java.util.Arrays;
import java.util.LinkedList;

public class Hash {

    private final int hashTabSize = 500;
    private final int a;
    private LinkedList<String>[] tab;

    public Hash(int a) {
        this.a = a;
        tab = new LinkedList[hashTabSize];
        for (int i = 0; i < tab.length; i++) {
            tab[i] = new LinkedList<>();
        }
    }



    public void add(String s) {
        if (!contains(s)) {
            int index = hash(s);
            tab[index].add(s);
        }
    }

    public boolean contains(String s) {
        int index = hash(s);
        return tab[index].contains(s);
    }

    private int hash(String s) {
        int sucet = 0;
        for (int i = 0; i < s.length(); i++) {
            sucet += s.charAt(i);
        }
       // return (int)(0.618034 * sucet) % hashTabSize;
        return sucet % hashTabSize;
    }

    public int size() {
        int res = 0;
        for (LinkedList<String> list : tab) {
            res += list.size();
        }
        return res;
    }

    public int getCapacity() {
        return hashTabSize;
    }

    // vysledok <0, 1>
    public double getLoadFactor() {
        return size() / (double) getCapacity();
    }

    public String toString() {
        return Arrays.toString(tab);
    }

    public void printStructure() {
        //System.out.println(this);
        System.out.println(toString());
    }

    public void printTab() {
        int[] s = new int[tab.length];
        for (int i = 0; i < s.length; i++) {
            s[i] = tab[i].size();
        }
        System.out.println(Arrays.toString(s));
    }

    private static String generateString() {
        int size = (int)(Math.random() * 10) + 1;
        StringBuilder sb = new StringBuilder();
        String text = "abcdefghijklmnopqrstuvxyz";
        for (int i = 0; i < size; i++) {
            char c = text.charAt((int)(Math.random() * text.length()));
            sb.append(c);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Hash hashTab = new Hash(1);
        /*String[] vstup = {"add", "set", "hash", "get", "java", "add"};
        for (String s : vstup) {
            hashTab.add(s);
        }
        System.out.println(hashTab.hash("set"));
        System.out.println(hashTab.size());
        System.out.println(hashTab.getLoadFactor());
        hashTab.printStructure();**/

        for (int i = 0; i < 1_000_000; i++) {
            if (i % 100_000 == 0) {
                System.out.println(i);
            }
            hashTab.add(generateString());
        }
        hashTab.printTab();
    }

}