package PAZ1b.cvicenie09;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
public class NasHashSet {
// pole listov
private LinkedList<String>[] poleListov;
private int size;
private double a;
public NasHashSet(int velkost, double a) {
this.a = a;
poleListov = new LinkedList[velkost];
for (int i = 0; i < velkost; i++) {
poleListov[i] = new LinkedList<String>();
}
}
private static int zaHashuj(String object, int velkost, double a) {
int suma = 0;
// spocitam sumu pre object
for (int i = 0; i < object.length(); i++) {
suma = suma + object.charAt(i);
}
// spocitam modulo aby som vratil hodnotu z rozsahu 0 az velkost-1
return (int) (a * suma) % velkost;
}
public boolean add(String slovo) {
// 1. zahashovat
int indexKam = zaHashuj(slovo, poleListov.length, a);
// 2. tak to tam dam
LinkedList<String> aktualny = poleListov[indexKam];
if (aktualny.contains(slovo))
return false;
LinkedList<String> listDoktorehoPridavam = poleListov[indexKam];
listDoktorehoPridavam.add(slovo);
size++;
return true;
}
@Override
public String toString() {
String vypis = "";
for (int i = 0; i < poleListov.length; i++) {
LinkedList<String> aktualny = poleListov[i];
for (String prvok : aktualny) {
vypis = vypis + prvok + " ";
}
}
return vypis;
}
public void printStructure() {
String vypis = "";
for (int i = 0; i < poleListov.length; i++) {
LinkedList<String> aktualny = poleListov[i];
vypis = vypis + i + ": ";
for (String prvok : aktualny) {
vypis = vypis + prvok + " ";
}
vypis = vypis + "\n";
}
System.out.println(vypis);
}
public boolean contains(String s) {
int index = zaHashuj(s, poleListov.length, a);
LinkedList<String> aktualny = poleListov[index];
return aktualny.contains(s);
}
public int getCapacity() {
return poleListov.length;
}
public int size() {
return size;
}
public double getLoadFactor() {
return (double) size() / getCapacity();
}
public static void main(String[] args) {
// String retazec = "Ahoj";
// System.out.println(zaHashuj(retazec, 123));
double a = Math.random();
NasHashSet mnozina = new NasHashSet(4, a);
String[] naPridavanie = { "Viktor", "Baska", "Slavka" };
for (int i = 0; i < naPridavanie.length; i++) {
System.out.println(naPridavanie[i] + " " + zaHashuj(naPridavanie[i], mnozina.poleListov.length, a));
mnozina.add(naPridavanie[i]);
}
System.out.println(mnozina);
mnozina.printStructure();
System.out.println(mnozina.getLoadFactor());
}
}