HashCode für Indexberechnung im Array

Guayana76

Neues Mitglied
Moin Leute, bin momentan echt am verzweifeln.
Ich versuche eine Tabelle durch Nutzung von HashCode zu befüllen aber es will nicht klappen. Gegooglet habe ich bereits und im Forum bin ebenfalls nicht fündig geworden.
Kann mir bitte jemand sagen, wo der Fehler liegt?

Java:
import java.lang.*;
import java.util.*;
public class HashTable<E>{
    private final E[] table;
    Hashtable<Integer, E> t;
    int kap;
    @SuppressWarnings("unchecked")
    public HashTable(final int capacity) {
        table = (E[]) new Object[capacity];
        t = new Hashtable<Integer, E>(capacity);
        kap = capacity;
    }
    /** 
     *  1.Hashfunktion:         "h(k)=k mod m"
     *  2.Hashfuktion:          "h'(k)=1 + k mod (m-2)"
     *      k ist der Wert des übergebenen elemets.
     *      m ist die Kapazität der Tabelle.
     *  Vorgehen bei Kollision: s(j,k)=j*h'(k)
     *      j ist die Anzahl der Kollisionen.
     *    
     *  @return Anzahl der betrachteten Plätze in der Hash-Tabelle
     *         
     */
    public int insert(final E element){
        if(t.size() == kap){
            throw new IllegalStateException();
        }
        boolean added = false;
        int count = 0;  // der Zähler für betrachtete Stellen
        int koll = 0;   // Kollisionszähler
        int index = hashCode(element);
        while(added == false){
            if(table[index] == null){
                count++;
                table[index] = element;
                //added = true;
                return count;
            } else {
                count++;
                koll++;
                index += koll*(hashCode2(element));
                if(table[index] == null){
                    table[index] = element;
                    //added = true;
                    count++;
                    return count;
                } else {
                    added = false;
                    count++;
                }
            }
        }
        return count;
    }
        public int hashCode(E element){
        return Math.abs((Integer)element) % kap;
    }
        public int hashCode2(E element){
        return 1 + Math.abs((Integer)element) % (kap-2);
    }

Bin für jede Hilfestellung dankbar!

EDIT: Ich glaube, dass die zweite Hash-Methode Probleme macht. Wüsste aber nicht warum.
 
Was klappt denn nicht? 😉


added setzt du niemals auf true.
t ist überflüssig.
kap wird nirgends verändert.
Sicher, dass der Index erhöht werden soll, im Kollisionsfall: index += koll*(hashCode2(element))?
In hashCode(2) castest du das Element auf Integer, damit funktioniert das ganze nur für Integer - sicher, dass dies das gewünschte Verhalten ist? Effektiv ist damit der Typparameter E falsch.
 

Zurück
Oben