From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100102.html | 330 +++++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100102.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100102.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100102.html b/Master/Reference Architectures and Patterns/hjp5/html/k100102.html new file mode 100644 index 0000000..bc5268a --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100102.html @@ -0,0 +1,330 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 15 - Collections II +
+
+ + + + +

15.5 Die Collection des Typs Map

+
+ +
+ + + + +

15.5.1 Abstrakte Eigenschaften

+ +

+Eine Collection des Typs Map +realisiert einen assoziativen Speicher, der Schlüssel auf Werte +abbildet. Sowohl Schlüssel als auch Werte sind Objekte eines +beliebigen Typs. Je Schlüssel gibt es entweder keinen oder genau +einen Eintrag in der Collection. Soll ein Schlüssel-Wert-Paar +eingefügt werden, dessen Schlüssel bereits existiert, wird +dieses nicht neu eingefügt. Es wird lediglich dem vorhandenen +Schlüssel der neue Wert zugeordnet. Der Wert wird also praktisch +ausgetauscht. + +

+Das Interface Map +ist nicht von Collection +abgeleitet, sondern eigenständig. Es definiert folgende Methoden: +

+ + + + + +
+ +
+int size()
+boolean isEmpty()
+boolean containsKey(Object key)
+boolean containsValue(Object value)
+Object get(Object key)
+Object put(Object key, Object value)
+Object remove(Object key)
+void putAll(Map t)
+void clear()
+public Set keySet()
+public Collection values()
+public Set entrySet()
+boolean equals(Object o)
+int hashCode()
+
+
+
+java.util.Map
+ +

+Die Methoden size, +isEmpty, +remove, +clear, +equals +und hashCode +sind mit den gleichnamigen Methoden des Collection-Interfaces +identisch und brauchen daher nicht noch einmal erklärt zu werden. + +

+Mit Hilfe von put +wird ein neues Schlüssel-Wert-Paar eingefügt bzw. dem bereits +vorhandenen Schlüssel ein neuer Wert zugeordnet. Die Methode +putAll +macht das für alle Paare der als Argument übergebenen Map. +Auch hier gilt die Regel, dass ein Schlüssel, der bereits vorhanden +ist, nicht neu eingefügt wird. Lediglich sein zugeordneter Wert +wird ausgetauscht. Mit der Methode get +kann der Wert zu einem Schlüssel beschafft werden. Da der Rückgabewert +vom Typ Object +ist, muss er auf den erwarteten Wert gecastet werden. +

+ + + + + + + + + +
+ +

+Falls der angegebene Schlüssel nicht in der Map +enthalten ist, wird null +zurückgegeben. Hier ist Vorsicht geboten, denn ein null-Wert +wird auch dann zurückgegeben, wenn die Map +das Einfügen von null-Werten +erlaubt und ein solcher diesem Schlüssel explizit zugeordnet +wurde. Um diese beiden Fälle zu unterscheiden, kann die Methode +containsKey +verwendet werden. Sie gibt genau dann true +zurück, wenn der gewünschte Schlüssel in der Map +enthalten ist. Andernfalls liefert sie false. +Analog dazu kann mit containsValue +festgestellt werden, ob ein bestimmter Wert mindestens einmal in der +Map +enthalten ist.

+ + + + +
 Hinweis 
+
+ +

+Im Vergleich zum Collection-Interface +fällt auf, dass eine Map +keine Methode iterator +besitzt. Statt dessen kann sie drei unterschiedliche Collections erzeugen, +die dann natürlich ihrerseits dazu verwendet werden können, +einen Iterator zu liefern. Diese Collections werden als Views, +also als Sichten auf die Collection bezeichnet: +

+ +

+Neben den im Interface definierten Methoden sollte eine konkrete Map-Implementierung +zwei Konstruktoren zur Verfügung stellen. Ein leerer Konstruktor +dient dazu, eine leere Map +zu erzeugen. Ein zweiter Konstruktor, der ein einzelnes Map-Argument +erwartet, erzeugt eine neue Map +mit denselben Schlüssel-Wert-Paaren wie die als Argument übergebene +Map. + + + + +

15.5.2 Implementierungen

+ +

+Das JDK stellt mehrere Implementierungen des Map-Interfaces +zur Verfügung: +

+ +

+Weitere Details zur Klasse Hashtable +finden sich in Abschnitt 14.4. +Dort gibt es auch ein kleines Anwendungsbeispiel, das wir hier in +einer für die Klasse HashMap +angepassten Form zeigen wollen: + + +

+ + + + + +
+ +
+001 /* Listing1504.java */
+002 
+003 import java.util.*;
+004 
+005 public class Listing1504
+006 {
+007   public static void main(String[] args)
+008   {
+009     HashMap h = new HashMap();
+010 
+011     //Pflege der Aliase
+012     h.put("Fritz","f.mueller@test.de");
+013     h.put("Franz","fk@b-blabla.com");
+014     h.put("Paula","user0125@mail.uofm.edu");
+015     h.put("Lissa","lb3@gateway.fhdto.northsurf.dk");
+016 
+017     //Ausgabe
+018     Iterator it = h.entrySet().iterator(); 
+019     while (it.hasNext()) {
+020       Map.Entry entry = (Map.Entry)it.next();
+021       System.out.println(
+022         (String)entry.getKey() + " --> " +
+023         (String)entry.getValue()
+024       );
+025     } 
+026   }
+027 }
+
+
+Listing1504.java
+ +Listing 15.4: Anwendung der Klasse HashMap

+ +

+Der wichtigste Unterschied liegt in der Ausgabe der Ergebnisse. Während +bei der Hashtable +eine Enumeration +verwendet wurde, müssen wir hier durch Aufruf von entrySet +zunächst eine Menge der Schlüssel-Wert-Paare beschaffen. +Diese liefert dann einen Iterator, der für jedes Element ein +Objekt des Typs Map.Entry +zurückgibt. Dessen Methoden getKey +und getValue +liefern den Schlüssel bzw. Wert des jeweiligen Eintrags. Alternativ +hätten wir auch mit keySet +die Menge der Schlüssel durchlaufen und mit get +auf den jeweils aktuellen Wert zugreifen können. Dazu müssten +die Zeilen 018 bis 025 +im vorigen Listing durch folgenden Code ersetzt werden: + +

+Iterator it = h.keySet().iterator();
+while (it.hasNext()) {
+  String key = (String)it.next();
+  System.out.println(
+    key + " --> " + (String)h.get(key)
+  );
+}
+
+ + +

+Die Ausgabe des Programms unterscheidet sich nur in der Sortierung +von der von Listing 14.3: + +

+Franz --> fk@b-blabla.com
+Fritz --> f.mueller@test.de
+Paula --> user0125@mail.uofm.edu
+Lissa --> lb3@gateway.fhdto.northsurf.dk
+
+ +
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3