HashMap und Methoden richtig einbinden

NicoBec

Mitglied
Hey,
ich habe folgende Aufgabe:

Ich soll eine HashMap schreiben, die mit den beiden generischen Parametern K und V funktioniert. Dabei soll die BucketHashing Methode verwendet werden.

Die Hauptklasse ist folgende:

Java:
package programming.set11.brownies;

public class BrownieMap<K, V> {

    HashEntry[] bucketArray;

    /**
     * The capacity sets the length of the bucket array.
     *
     * @param numberOfBuckets
     *            bucket array length
     * @throws IllegalArgumentException
     *             if the number of buckets is smaller than one.
     */
    public BrownieMap(int numberOfBuckets) {

        if (numberOfBuckets < 1) {
            throw new IllegalArgumentException("Plese enter a number > 1.");
        }

        HashEntry[] bucketArray = new HashEntry[numberOfBuckets];

        this.bucketArray = bucketArray;
    }

    /**
     * Put an item into the map.
     *
     * @param key
     *            the key of the item.
     * @param value
     *            the value of the item.
     * @throws IllegalArgumentException
     *             if the key or the value is {@code null}.
     */
    public void put(K key, V value) {

        if (key == null || value == null) {
            throw new IllegalArgumentException("Plese enter a number > 1.");
        }

        int bucket = Math.abs(key.hashCode()) % bucketArray.length;
        HashEntry entry = findEntry(bucketArray[bucket], key);
        if (entry == null) {
            entry = new HashEntry(key, value);
            entry.setLink(bucketArray[bucket]);
            bucketArray[bucket] = entry;
        } else {
            entry.setValue(value);
        }
    }

    /**
     * Returns the value of a given key.
     *
     * @param key
     *            the key of the item.
     * @return the value belonging to that key or {@code null} if no value is mapped
     *         to that key.
     * @throws IllegalArgumentException
     *             if the key is {@code null}.
     */
    public V get(K key) {

        if (key == null) {
            throw new IllegalArgumentException("Plese enter a number > 1.");
        }

        int bucket = Math.abs(key.hashCode()) % bucketArray.length;
        HashEntry entry = findEntry(bucketArray[bucket], key);
        if (entry == null) {
            return null;
        } else {
            return (V) entry.getValue();
        }
    }

    /**
     * Removes one key and its value from the map. If the key does not exist in the
     * map, nothing happens.
     *
     * @param key
     *            the key.
     * @throws IllegalArgumentException
     *             if the key is {@code null}.
     */
    public void remove(K key) {
       
        if(key == null) {
            throw new IllegalArgumentException("key can not be null.");
        }
       
        int bucket = Math.abs(key.hashCode()) % bucketArray.length;
        HashEntry entry = findEntry(bucketArray[bucket], key);
        if(entry != null) {
            HashEntry.remove(entry);
        } else {
           
        }
    }

    /**
     * Clears the entire map.
     */
    public void clear() {
        // Implement me!
    }

    /*
     * Scans the entry chain looking for an entry that matches the specified key. If
     * no such entry exists, findEntry returns null.
     */
    private HashEntry findEntry(HashEntry entry, K key) {
        while (entry != null) {
            if (entry.getKey().equals(key))
                return entry;
            entry = entry.getLink();
        }
        return null;

    }
}

die HashEntry Klasse dazu sieht wie folgt aus:

Java:
package programming.set11.brownies;

/* Package-private class: HashEntry */
/*
* This class represents a pair of a key and a value, along with a reference
* to the next HashEntry in the chain. The methods exported by the class
* consist only of getters and setters.
*/
public class HashEntry<K,V> {

    /* Creates a new HashEntry for the specified key/value pair */
    public HashEntry(K key, V value) {
    entryKey = key;
    entryValue = value;
    }
   
    /* Returns the key component of a HashEntry */
    public K getKey() {
    return entryKey;
    }
   
    /* Returns the value component of a HashEntry */
    public V getValue() {
    return entryValue;
    }
   
    /* Sets the value component of a HashEntry to a new value */
    public void setValue(V value) {
    entryValue = value;
    }
   
    /* Returns the next link in the entry chain */
    public HashEntry getLink() {
    return entryLink;
    }
   
    /* Sets the link to the next entry in the chain */
    public void setLink(HashEntry nextEntry) {
    entryLink = nextEntry;
    }
   
    /* Private instance variables */
    private K entryKey; /* The key component for this HashEntry */
    private V entryValue; /* The value component for this HashEntry */
    private HashEntry entryLink; /* The next entry in the chain */
   
}

Wie ihr sicherlich seht, habe ich die remove und die clear Methoden noch nicht implementiert. Als Hinweis: ich kann die Methoden nicht ändern, also remove z.B. static machen. Wie kann ich Mein Ansatz wäre hierbei an den Punkt für den entsprechenden Key zu gehen und hier den Value einfach mit .remove zu entfernen. Hierbei bekomme ich aber die Meldung, dass ich meine Methode auf static umstellen muss.

Mein Ansatz für die clear Methode wäre einfach, das bucketArray auf [0] zu setzen, sodass ich "keine Eimer" mehr habe. Ist der Gedanke grundsätzlich richtig und wie kann ich values zu bestimmten Elementen sonst noch entfernen?

LG
 

mrBrown

Super-Moderator
Mitarbeiter
Mein Ansatz für die clear Methode wäre einfach, das bucketArray auf [0] zu setzen, sodass ich "keine Eimer" mehr habe. Ist der Gedanke grundsätzlich richtig und wie kann ich values zu bestimmten Elementen sonst noch entfernen?
Du könntest alle Werte im Array auf null setzen.

Wie kann ich Mein Ansatz wäre hierbei an den Punkt für den entsprechenden Key zu gehen und hier den Value einfach mit .remove zu entfernen. Hierbei bekomme ich aber die Meldung, dass ich meine Methode auf static umstellen muss.
Die Methode remove, die du versuchst aufzurufen, gibt es weder es auch nicht als static, von daher kannst du sie so oder so nicht aufrufen.

Du müsstest im Wesentlichen den HashEntry aus der Kette herausnehmen
 

NicoBec

Mitglied
@mrBrown Dnke dir für die schnelle Antwort. Aber wie denkst du kann ich die remove Methode implementieren. Also mit welchem Code kann ich einen Wert an einer Stelle entfernen ohne Hashmap.remove(x); zu benutzen?

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
T HashMap values Bearbeitung Allgemeine Java-Themen 4
T Hashmap Values Bearbeitung Allgemeine Java-Themen 1
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
L HashMap Allgemeine Java-Themen 10
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
B HashMap Duplikate Allgemeine Java-Themen 4
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Tabelle aus CSV, 2 dimensionale HashMap? Allgemeine Java-Themen 4
D Mit Java PHP hashmap lesen Allgemeine Java-Themen 1
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
JavaWolf165 JsonObject in HashMap umwandeln Allgemeine Java-Themen 16
R ArrayList und HashMap Allgemeine Java-Themen 7
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
G Methoden HashMap speichert unter falschen Schlüsseln Allgemeine Java-Themen 6
D Verschachtelte HashMap initializieren Allgemeine Java-Themen 1
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
D Datentypen HashCollision in HashMap Allgemeine Java-Themen 3
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B Userdaten in Hashmap speichern - Servlet Allgemeine Java-Themen 6
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
M Füllfaktor einer Hashmap Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
D Datentypen HashMap Allgemeine Java-Themen 5
R Collections Performance einer HashMap Allgemeine Java-Themen 26
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
T Erste Schritte HashMap<String, int> Allgemeine Java-Themen 2
K Hashmap sortieren Allgemeine Java-Themen 6
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
K HashMap sorting verhindern Allgemeine Java-Themen 10
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
L HashMap mit Enum Keys Allgemeine Java-Themen 3
J Array als Schlüssel für HashMap Allgemeine Java-Themen 6
S Geschwindigkeit HashMap oder .getParent Allgemeine Java-Themen 5
V Hashmap-Frage Allgemeine Java-Themen 3
M HashMap - Ich bin verwirrt Allgemeine Java-Themen 3
H2SO3- multiple Hashmap Allgemeine Java-Themen 5
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
J NullPointerException mit HashMap Allgemeine Java-Themen 2
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
I HashMap Problem... Allgemeine Java-Themen 3
C HashMap Allgemeine Java-Themen 12
Daniel_L Map/HashMap - Reihenfolge von Einträgen Allgemeine Java-Themen 4
L HashMap Key Reihenfolge umkehren Allgemeine Java-Themen 8
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
J Inhalt von HashMap vergleichen Allgemeine Java-Themen 3
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
T Hashmap füllen mit rs sortierung Allgemeine Java-Themen 9
D HashMap sortieren Allgemeine Java-Themen 2
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
D HashMap Problem Allgemeine Java-Themen 14
G Runnables aus Hashmap starten Allgemeine Java-Themen 4
J java.util.ConcurrentModificationException bei HashMap? Allgemeine Java-Themen 2
G HashMap key ändern Allgemeine Java-Themen 5
L HashMap / Objekte auf Festplatte zur Laufzeit auf HD swappen Allgemeine Java-Themen 7
S Problem mit Hashmap Allgemeine Java-Themen 2
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
E Auslesen aus Hashmap Allgemeine Java-Themen 3
P HashMap mit mehreren gleichen keys Allgemeine Java-Themen 4
alexpetri hashmap bästpractice Allgemeine Java-Themen 4
J HashMap mit Webservice realisierbar? Allgemeine Java-Themen 4
ARadauer hashmap vs hastable Allgemeine Java-Themen 5
T HashMap#values Reihenfolge Allgemeine Java-Themen 13
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
L Wie kann ich eine HashMap abspeichern? Allgemeine Java-Themen 3
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P List in Hashmap schreiben Allgemeine Java-Themen 5
M Threads in einer Hashmap Allgemeine Java-Themen 5
P HashMap an 2 Stellen veränderbar Allgemeine Java-Themen 13
P HashMap auflösen Allgemeine Java-Themen 9
MQue HashMap durchlaufen Allgemeine Java-Themen 2
MQue HashMap Allgemeine Java-Themen 2
M HashMap kommt beim Löschen aus dem Tritt Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 9
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
B HashMap.containsKey. Allgemeine Java-Themen 10
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Klasse in HashMap speichern Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
M HashMap sortiert Allgemeine Java-Themen 6
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben