HashMap Werte einfügen, durchsuchen und auslesen

Tauber

Mitglied
Hey Leute,

wie kann ich hier Werte einfügen?

private static Map<Integer, Map<String, String>> directory = new HashMap<>();

Das Ganze wird benötigt, um Name, Vorname und Nummer abzuspeichern. Wie kann ich schauen, ob es eine Nummer bereits gibt? Wie kann ich mir die Anzahl von Einträgen anzeigen lassen?
 

Zettelkasten

Aktives Mitglied
Am Besten du siehst dir mal die Java-API für HashMaps an: [JAPI]HashMap[/JAPI]

Ganz grob: Eine (Hash)Map ist eine Zuordnung von einem Key zu einer Value (also einem Wert). Sozusagen eine Funktion in der Mathematik.

Für deinen konkreten Fall musst du dir überlegen, was du als Key verwenden willst, was also der Wert ist, der bekannt ist, mit welchem du dann die weiteren Daten herausfinden kannst.
 

Gucky

Top Contributor
get(nummer) und wenn eine Exception geworfen wird, dann ist es nicht da.

In einer Liste gibt es die Methode size(). Vielleicht gibt es die auch bei Maps.

Ich will nicht besserwisserisch klingen aber bei Google hättest du sich schneller Hilfe bekommen.
 

Tauber

Mitglied
Genau das ist ja mein Problem. Ich komme einfach nicht klar beim Umsteigen von Arrays zu Maps. Wir müssen ein kleines Personenverzeichnis erstellen. Informationen zu Personen sollen als Maps gespeichert werden und jede Person soll außerdem als Map repräsentiert werden.

Personalnummer, Name, Vorname und TelNr sollen gespeichert werden. Aber was mich verwirrt ist einfach, dass ich nur 3 Werte hier quasi Speichern kann: Integer, String und String:

private static Map<Integer, Map<String, String>> directory = new HashMap<>();

Die Personalnummer soll bestimmt der key sein, allerdings wie soll ich die drei anderen Werte dann abspeichern?

Mit directory.put speichert man Werte, aber wie genau? Ein kleines Beispiel wäre hilfreich. Die API hatte ich mir bereits angeschaut, aber ich verstehe dort -meistens- nie wirklich was.


Danke, lg
 

Zettelkasten

Aktives Mitglied
Wie ich an die Sache rangehen würde:

1. Ich überlege mir, was mein Key ist (Personalnummer).
Also kann ich schoneinmal einen groben Entwurf meiner Map erstellen: (Pseudocode)
Java:
Map<Personalnummer, Daten> directory = new HashMap<Personalnummer, Daten>();

2. Jetzt kommen die Values dran: Was genau muss ich speichern? (Name, Vorname und TelNr)
Du willst jetzt mehrere Variablen in eine Variable verpacken. Dazu kann man jetzt gut eine HashMap nehmen. Der Key ist eine Abkürzung für die Variable. Und die Werte sind die eigentlichen Variablen.
Das ganze könnte dann z.B. so aussehen:
Code:
"name" --> "Müller"
"vorname" --> "Hans"
"telnr" --> "012345679"
Jetzt baust du also deine HashMap wie folgt zusammen: (Pseudocode)
Java:
Map<Personalnummer, Map<Key, Wert>> directory = new HashMap<Personalnummer, Map<Key, Wert>>();
Die HashMap sieht dann im richtigen Code so aus wie du beschrieben hast:
Java:
private static Map<Integer, Map<String, String>> directory = new HashMap<Integer, Map<String, String>>();

Wenn du jetzt einen neuen Typen zur Map hinzufügen willst, tust du das so:
Java:
Map<String, String> daten = new HashMap<String, String>();
daten.put("name", "Müller");
daten.put("vorname", "Hans");
daten.put("telnr", "0123456789");
directory.put(141, daten); // 141 ist die Personalnummer
 

Tauber

Mitglied
Okay, sagen wir mal Beispielsweise ich habe dort 4 Einträge jetzt abgespeichert. Wie kann ich jetzt auf die ersten beiden Einträge zugreifen, die ich gemacht habe?

Denn ich möchte Personalnummer, Name, Vorname und Telnr vom ersten Eintrag und vom zweiten Eintrag in Arrays abspeichern.

Java:
size = 2; // Anzahl der Einträge die ins Array gespeichert werden sollen
String[][] eintraege = new String[size][4];
	for (int i = 0; i < size; i++) {
		eintraege[i][0] = ; // Personalnummer soll gespeichert werden
		eintraege[i][1] = ; // Name
		eintraege[i][2] = ; // Vorname
		eintraege[i][3] = ; // Telnr
	}

Bei eintraege[0] sollte nun immer die Personalnummer gespeichert werden usw.
Gibt es eine Möglichkeit die ersten beiden Personeneinträge zu bekommen oder einfach alle und diese in mein 2D Array zu kopieren?
 
Zuletzt bearbeitet:

Zettelkasten

Aktives Mitglied
Gibt es eine Möglichkeit die ersten beiden Personeneinträge zu bekommen?

Jein. HashMaps haben in Java keine feste Reihenfolge, dass heißt es gibt keine ersten Einträge. Du könntest aber den kleinsten Personaleintrag verwenden.

Ich verstehe aber nicht wieso du deine Personaleinträge in ein Array packen willst, wenn du sie jetzt in einer HashMap hast.
 

Tauber

Mitglied
Wir müssen eine Funktion schreiben, die uns alle Einträge anzeigt und diese soll über ein 2D Array geschehen. Daher muss ich eine Möglichkeit finden, alle Einträge in ein 2D Array zu kopieren.

Also die Reihenfolge ist dann wohl unwichtig, hauptsache alle werden ins 2D Array kopiert. Mit directory.size() erhalte ich schonmal die Anzahl der Einträge. Somit weiß ich wie groß das 2D Array sein muss, allerdings mit dem kopieren habe ich noch probleme. Weil ich einfach keine Idee habe dies umzusetzen.

Wenn man alle keys bekommen könnte, dann könnte man diese quasi durchlaufen lassen und dabei kopieren?

€: directory.keySet() liefert mir doch alle Personennummern, oder?

€2:

Mit directory.get(1) beispielsweise, bekomme ich folgendes:
{telnr=0012, vorname=Hans, name=Müller}
Jetzt müsste ich nur die einzelnen Daten da rausbekommen. Aber wie mache ich das?
 
Zuletzt bearbeitet:

Zettelkasten

Aktives Mitglied
Mit directory.get(1) beispielsweise, bekomme ich folgendes:
{telnr=0012, vorname=Hans, name=Müller}
Jetzt müsste ich nur die einzelnen Daten da rausbekommen. Aber wie mache ich das?

Java:
Map<String, String> daten = directory.get(id);
array[id][0] = id;
array[id][1] = daten["vorname"];
array[id][2] = daten[name"];
//...

Oder was dann vll. sinnvoller ist, ist vll deine HashMap so unzuändern:
Java:
Map<String, String[]> directory;
 

Tauber

Mitglied
Bekomme Fehlermeldungen:
Zeile 29: Type mismatch: Cannot convert from int to String
Zeile 30 - 32: Multiple markers at line. Type mismatch: Cannot convert from int to String. The type of expression must be an array type but it resolved to Map<String, String>

Java:
package tests;

import java.util.HashMap;
import java.util.Map;

public class Thashmap {
	private static Map<Integer, Map<String, String>> directory = new HashMap<>();
	
	public static void main(String[] args) {
		Map<String, String> daten = new HashMap<String, String>();
		daten.put("Name", "Müller");
		daten.put("Vorname", "Hans");
		daten.put("Telnr", "0123456789");
		directory.put(1, daten);
		
		daten = new HashMap<String, String>();
		daten.put("Name", "Schmidt");
		daten.put("Vorname", "Dieter");
		daten.put("Telnr", "9885454");
		directory.put(2, daten);
		
		int[] keys = {1, 2};
		int size = directory.size();
		
		String[][] eintraege = new String[size][4];
		
		for (int i = 0; i < size; i++) {
			daten = directory.get(keys[i]);
	        eintraege[i][0] = i; // Personalnummer soll gespeichert werden
	        eintraege[i][1] = daten["Name"];
	        eintraege[i][2] = daten["Vorname"];
	        eintraege[i][3] = daten["Telnr"];
		}
	}
}
 

Tauber

Mitglied
Okay, bei Zeile 30-32 hab ich allerdings noch folgenden Fehler:
Multiple markers at line.
Type mismatch: Cannot convert from String to int
The type of expression must be an array type but it resolved to Map<String, String>
 

Tauber

Mitglied
Okay, bin selbst drauf gekommen. Heißt
daten.get("Name") usw.

Jetzt ist das letzte was ich brauche, dass in Zeile 27 alle Keys als Array abgespeichert werden. Wie mache ich das?

Das hier klappt leider nicht:
Java:
int[] keys = directory.keySet();

Hier mein Quellcode bisher:
Java:
package tests;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Thashmap {
	private static Map<Integer, Map<String, String>> directory = new HashMap<>();
	
	public static void main(String[] args) {
		Map<String, String> daten = new HashMap<String, String>();
		daten.put("Name", "Müller");
		daten.put("Vorname", "Hans");
		daten.put("Telnr", "0123456789");
		directory.put(1, daten);
		
		daten = new HashMap<String, String>();
		daten.put("Name", "Schmidt");
		daten.put("Vorname", "Dieter");
		daten.put("Telnr", "9885454");
		directory.put(2, daten);
		
		int[] keys = {1, 2}; // Hier sollen alle Keys als Array abgespeicher werden
		int size = directory.size();
		
		String[][] eintraege = new String[size][4];
		
		for (int i = 0; i < size; i++) {
			daten = directory.get(keys[i]);
	        eintraege[i][0] = String.valueOf(i); // Personalnummer soll gespeichert werden
	        eintraege[i][1] = daten.get("Name");
	        eintraege[i][2] = daten.get("Vorname");
	        eintraege[i][3] = daten.get("Telnr");
		}	
	}
}
 
Zuletzt bearbeitet:

didum

Mitglied
Du hast zwei Möglichkeiten.
Entweder du castet das KeySet in einen Array:

Java:
Integer[] keys = new Integer[directory.keySet().size()];
directory.keySet().toArray(keys);

int size = directory.size();

String[][] eintraege = new String[size][4];

for (int i = 0; i < size; i++) {
	daten = directory.get(keys[i]);
	eintraege[i][0] = String.valueOf(keys[i]); // Das wohl die Personalnummer und nicht i
	eintraege[i][1] = daten.get("Name");
	eintraege[i][2] = daten.get("Vorname");
	eintraege[i][3] = daten.get("Telnr");
}

Oder m.M. nach die schönere Variante mit einer foreach-Schleife:

Java:
package tests;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Thashmap {
	private static Map<Integer, Map<String, String>> directory = new HashMap<>();

	public static void main(String[] args) {
		Map<String, String> daten = new HashMap<String, String>();
		daten.put("Name", "Müller");
		daten.put("Vorname", "Hans");
		daten.put("Telnr", "0123456789");
		directory.put(1900, daten);

		daten = new HashMap<String, String>();
		daten.put("Name", "Schmidt");
		daten.put("Vorname", "Dieter");
		daten.put("Telnr", "9885454");
		directory.put(4, daten);

		String[][] eintraege = new String[directory.size()][4];

		int i = 0;

		for (Entry<Integer, Map<String, String>> entry : directory.entrySet()) {
			daten = entry.getValue();
			eintraege[i][0] = String.valueOf(entry.getKey());
			eintraege[i][1] = daten.get("Name");
			eintraege[i][2] = daten.get("Vorname");
			eintraege[i][3] = daten.get("Telnr");
			i++;
		}
	}
}
 

Tauber

Mitglied
Dankeee, klappt alles bestens soweit.
Als nächstes ist die Suchfunktion dran. 3 Inputfelder "Name", "Vorname" und "Telnr". Ein leeres Feld gilt als passend. Zurückgegeben werden sollen die Personalnummern der passenden Einträge. Wenn ich beispielsweise nur "Hans" ins suchfeld Vorname eingebe soll er alle Personalnummern zurückgeben, die Hans als Vornamen haben. Wenn ich nichts in den drei Feldern eintippe, sollen alle Personalnummern zurückgegeben werden.

Inputfelder sind kein Problem zum erstellen, aber wie gehe ich bei der Suche vor?

Java:
    package tests;
     
    import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

     
    public class Thashmap {
        private static Map<Integer, Map<String, String>> directory = new HashMap<>();
     
        public static void main(String[] args) {
            Map<String, String> daten = new HashMap<String, String>();
            daten.put("Name", "Müller");
            daten.put("Vorname", "Hans");
            daten.put("Telnr", "0123456789");
            directory.put(1900, daten);
     
            daten = new HashMap<String, String>();
            daten.put("Name", "Schmidt");
            daten.put("Vorname", "Hans");
            daten.put("Telnr", "9885454");
            directory.put(4, daten);
     
            String[][] eintraege = new String[directory.size()][4];
     
            int i = 0;
     
            for (Entry<Integer, Map<String, String>> entry : directory.entrySet()) {
                daten = entry.getValue();
                eintraege[i][0] = String.valueOf(entry.getKey());
                eintraege[i][1] = daten.get("Name");
                eintraege[i][2] = daten.get("Vorname");
                eintraege[i][3] = daten.get("Telnr");
                i++;
            }
            
            String[] suche = new String[3];
            suche[0] = JOptionPane.showInputDialog("Name");
            suche[1] = JOptionPane.showInputDialog("Vorname");
            suche[2] = JOptionPane.showInputDialog("Telnr.");
        }
    }
 

Gucky

Top Contributor
Du lässt dir sämtliche Schlüssel geben, iterierst über die Map und checkst bei jeder zurückgegebenen Map das gewünschte Detail und speicherst bei Übereinstimmung den Key in einer LinkedList.
 

3301

Mitglied
Kurze Frage: Wenn Du immer wieder eine neue Map anlegst mit New HashMap daten. Dann kannst du doch nicht genau im directory.get(3) auf die Daten zugreifen.(zB auf Name oder Telefonnr)

Das würde dann so aussehen falls nach einer Laufzeit mehrere Einträge gemacht sind.

1 --> Name --> Mustermann, Vorname --> Maxs, Telefonnr --> 01
2 --> Name --> Mustermanns, Vorname --> Madx, Telefonnr --> 234
3 --> Name --> Mustermannd, Vorname --> Maxf, Telefonnr --> 1234
7 --> Name --> Mustermannf, Vorname --> Maxg, Telefonnr --> 0134

Wenn ich jetzt den Key habe. Sagen wir mal 3 und ich möchte daraus dann den Namen,Vornamen und die Telefonnr in einem String[] abspeichern. Wie soll das klappen?

btw. Ich arbeite auch an der Lösung.

okay. Sry ich glaub ich kann das von den vorherigen Beiträgen ableiten.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
T Collections Werte aus einer HashMap auslesen, oder gehts auch einfacher ? Java Basics - Anfänger-Themen 6
A werte aus hashmap auslesen Java Basics - Anfänger-Themen 18
F Hashmap, mehrere werte/key Java Basics - Anfänger-Themen 2
O Werte aus HashMap in einer ArrayList Java Basics - Anfänger-Themen 3
D HashMap überschreibt vorhandene Werte Java Basics - Anfänger-Themen 10
G werte aus hashmap lesen und vergleichen? Java Basics - Anfänger-Themen 2
R Werte der letzten 10 sek aus HashMap löschen Java Basics - Anfänger-Themen 14
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Neue Themen


Oben