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();
}
}