Hashmap
Hashmap: Video Erklärung
Definition und Motivation Array: Zugriff über Index=Zahl Wert(Value) Schlüssel(Key) Maier, Klaus 21 Array Hashtag: Zugriff über einen nichtnumerischen Wert 06431 92310 Maier, Klaus Hashtabelle Beispiele: Telefontabelle: 06431 92310 Maier, Klaus Bücher: Die 25 Regeln des... BXF 2450 Schule: Anz. der Tischdecken BU 02
Java Objekt: Hashmap I https://docs.oracle.com/javase/7/docs/api/java/util/hashmap.html Site:docs.oracle.com HashMap Datentypen der Parameter
Java Objekt: Hashmap II Leitet sich von AbstractMap ab und import java.util.hashmap; Implementiert Map, Clonable, Serializable
Überblick der Klassenbeziehungen für HashMap Object Map HashMap WeakHashMap HashTable
Java Objekt: Methoden von Hashmap I Import der Java Bibliotheken: import java.util.hashmap; Deklaration einer Instanz(Objekt) von Hashmap: HashMap telefonbuch = new HashMap (); HashMap<Object, Object> telefonbuch = new HashMap<Object, Object>(); Generics : Es dürfen nur noch Objekte mit bestimmten Typ verwendet werden: HashMap<String, Integer> telefonbuch = new HashMap<String, Integer>(); Map<String, Integer> telefonbuch = new HashMap<String, Integer>(); Interface
Java Objekt: Methoden von Hashmap II Zufügen von Einträgen: telefonbuch.put("jana Türlich", 1413); telefonbuch.put("rainer Ernst", 2118); telefonbuch.put("paul Lahner", 4711); telefonbuch.put("jim Panse", 4711); telefonbuch.put("jim Panse", 4711); Bekommt auch den Key 4711 Wird nicht gespeichert, da bereits vorhanden: Size=4 Zugriff auf Telefonnummer bei gegebenen Namen int num = telefonbuch.get("paul Lahner"); System.out.println(num); Ausgabe: 4711 Keine Funktion um bei Key nach Namen zu suchen, da evtl. nicht eindeutig!
Java Objekt: Methoden von Hashmap III Ausgabe aller Werte: for (Integer tel: telefonbuch.values()) System.out.println("Nummer: + " + tel); Ausgabe aller Schlüssel: for (String key: telefonbuch.keyset()) System.out.println("Schlüssel: " + key); Suche nach Wert if(telefonbuch.containsvalue(4711)) System.out.println("Der Eintrag 4711 existiert!"); Suche nach Schlüssel if(telefonbuch.containskey("paul Lahner")) System.out.println("Der Eintrag Paul Lahner existiert!");
Java Objekt: Methoden von Hashmap IV Auflistung mit benutzerdefinierter Methode printhashmap(telefonbuch); Deklaration der Parameter Suche nach Schlüssel public static void printhashmap(hashmap<string, Integer> meintelefonbuch){ Set<String> keys = meintelefonbuch.keyset(); for(string actkey:keys){ System.out.println(actKey+"==>"+meinTelefonbuch.get(actKey)); } Deklaration der Menge; Der Menge wird die Menge aller Schlüssel zugewiesen; benötigt: import java.util.set; Durchläuft alle Elemente der Menge
Java Objekt: Set I Set EnumSet HashSet EnumSet HashSet Import der Java Bibliotheken: import java.util.enumset import java.util.hashset import java.util.linkedhashset import java.util.treeset Typische Methoden: add: Zufügen von einem Element remove: Entfernen von einem Element
Java Objekt: Set II Typische Methoden: add: Zufügen von einem Element remove: Entfernen von einem Element Durchlaufen aller Elemente vom Set: Set seta = new HashSet(); seta.add("element 0"); seta.add("element 1"); seta.add("element 2"); for(object object : seta) String element = (String) object; Neue Instanz von HashSet Zufügen von drei Elementen Durchlauf aller Elemente
Interne Struktur I HashMap speichert die Daten in Form von Wertepaaren. Jedes Wertepaar wird in einem Objekt vom Typ Entry <K,V> abgespeichert. static class Entry<K,V> implements Map.Entry<K,V> { final K key; Schlüssel des Elementes V value; Wert des Elementes Entry<K,V> next; Verweis auf nächstes Objekt int hash; Berechneter Hashwert.. }
Interne Struktur II Alle Elemente in einem Array vom Typ Entry <K,V> abgespeichert. table[] 0 1 2 3 4 5 6 7 null value1 null key1 value1 key2 value2 null Entry<K,V>object
Interne Struktur III public V put(k key, V value) { if (key == null) return putfornullkey(value); int hash = hash(key); int i = indexfor(hash, table.length); for (Entry<K,V> e = table[i]; e!= null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key key.equals(k))) { } } } V oldvalue = e.value; e.value = value; e.recordaccess(this); return oldvalue; modcount++; addentry(hash, key, value, i); return null; Wenn der Schlüssel null ist, wird das Element an Stelle 0 zugefügt Berechnet den HashKey(Schlüssel) Berechnet den Index in table[] für das Key-Value Paar Überprüft, ob der Key bereits in der Tabelle enthalten ist Falls ja, wird der Wert des vorhandenen Schlüssels mit dem neuen Wert ersetzt Falls nein, wird der Eintrag am Ende der verketteten Liste zugefügt
Interne Struktur IV public V get(object key) { if (key == null) return getfornullkey(); int hash = hash(key.hashcode()); for (Entry<K, V> e = table[indexfor(hash, table.length)]; e!= null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key key.equals(k))) return e.value; } return null; } Wenn der Schlüssel null ist, wird die Methode getfornullkey aufgerufen Berechnet den Hash-Wert Verwendet die IndexFor-Methode, um den Index der Key-Value Kombination zu bestimmen Iteriert durch die verkettete Liste an der Position vom Array und vergleicht die Schlüssel. Gefunden: Rückgabe des Wertes Nicht gefunden: Rückgabe von Null