Datentypen Inhalt zum Iterator wieder aufrufen?

btl1000

Mitglied
Hallo,

vorab als Hintergrund: Ich hab vor x Jahren mal C und Delphi und so etwas gelernt und dann 15 Jahre nichts mehr in dem Bereich gemacht. Durch widrige Umstände soll ich nun Java-Programmierbeispiele kurzfristig liefern und stehe ziemlich auf dem Schlauch. Für eine vernünftige Einarbeitung fehlt mir leider effektiv die Zeit, so dass ich mit meinem Halbwissen ein bisschen herumdilettiere und anhand "Java ist auch eine Insel" zumindest ein lauffähiges Beispiel zum Thema TreeTables zusammenbekommen muss.

An folgendem hänge ich nun schon sehr lange fest:

Ich möchte einen zusammengesetzten Datentyp Adresse in einer TreeMap oder HashMap verwalten. Dazu gehört auch, dass ich ab und zu einfach durch alle Elemente iterieren und die Inhalte sehen möchte. Doch bereits daran scheine ich zu scheitern. Vielleicht hat ja jemand den entscheidenden Hinweis zu folgendem Code:

Java:
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;

public class Example2_1 {
	public static void main(String[] args) {
		Adresse a = new Adresse("","","","");
		
		Collection<Adresse> adressliste =  new LinkedList<Adresse>();

		// Beispieldaten einfüllen
		adressliste.add(new Adresse("A","2","3","4"));
		adressliste.add(new Adresse("B","2","3","4"));
		adressliste.add(new Adresse("C","2","3","4"));
		adressliste.add(new Adresse("D","2","3","4"));

		// Jetzt einfach wieder ausgeben
		for ( Iterator<Adresse> i = adressliste.iterator();  i.hasNext(); )
		{
			a =  adressliste.get(i);
			System.out.println(a);
			i.next();
		}	
	}
}

Adresse wird hier angelegt:

Java:
public class Adresse {
		String vorname;
		String nachname;
		String strasse;
		String ort; 
		
	
	
	Adresse (String vn, String nn,  String st, String or)
	{
		vorname = vn;
		nachname = nn;
		strasse = st;
		ort = or;
	}
	
		
	
		
		
		public String toString()
		{
			return vorname+", "+nachname+"; "+strasse+", "+ort;
		}
	
}

So wie es da steht kompiliert es nicht. Irgendwie verstehe ich nicht, wie ich vom Iterator i wieder zum iterierten Objekt zurückkomme.
 

musiKk

Top Contributor
vorab als Hintergrund: Ich hab vor x Jahren mal C und Delphi und so etwas gelernt und dann 15 Jahre nichts mehr in dem Bereich gemacht. Durch widrige Umstände soll ich nun Java-Programmierbeispiele kurzfristig liefern und stehe ziemlich auf dem Schlauch. Für eine vernünftige Einarbeitung fehlt mir leider effektiv die Zeit, so dass ich mit meinem Halbwissen ein bisschen herumdilettiere und anhand "Java ist auch eine Insel" zumindest ein lauffähiges Beispiel zum Thema TreeTables zusammenbekommen muss.

Wo wird man denn solchen "widrigen Umständen" ausgesetzt?

So wie es da steht kompiliert es nicht. Irgendwie verstehe ich nicht, wie ich vom Iterator i wieder zum iterierten Objekt zurückkomme.

Es sollte schon kompilieren. Die Methode [c]next()[/c] des Iterators liefert das Objekt. Also [c]Adresse foo = i.next();[/c].
 
T

tommysenf

Gast
Benutze lieber die foreach Schleife:

Java:
for(Adresse i : addressliste) {
    System.out.println(i);
}

oder die gute alte while Schleife:

Java:
Iterator<Adresse> i = adressliste.iterator();
while(i.hasNext()) {
     System.out.println(i.next());
}
 

btl1000

Mitglied
Danke an alle, bin jetzt schon mal einen Schritt weiter...

... und habe noch eine Frage (sorry, wenn das so schrittweise durchkleckert, aber allzuviel muss ich auch nicht mehr schaffen ;-)

Jetzt will ich natürlich auch den Kollisionsfall darstellen. Dazu habe ich die hashCode-Funktion entsprechend vereinfacht (verschlechtert), so dass nur der Nachname als Merkmal benutzt wird, um bewusst Gleichheiten zu erzeugen:

Java:
public class Adresse {
		String vorname;
		String nachname;
		String strasse;
		String ort; 
		
	
	
	Adresse (String vn, String nn,  String st, String or)
	{
		vorname = vn;
		nachname = nn;
		strasse = st;
		ort = or;
	}
	
		
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Adresse other = (Adresse) obj;
		if (nachname == null) {
			if (other.nachname != null)
				return false;
		} else if (!nachname.equals(other.nachname))
			return false;
		}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((nachname == null) ? 0 : nachname.hashCode());
		return result;
	}

		public String toString()
		{
			return vorname+", "+nachname+"; "+strasse+", "+ort;
		}
	
}

und dann rufe ich es ab:
Java:
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.HashMap;
import java.util.Map;

public class Example2_1 {
	public static void main(String[] args) {
		Adresse a = new Adresse("","","","");
		Adresse b = new Adresse("","","","");

		Collection<Adresse> adressliste =  new LinkedList<Adresse>();
		Map< Integer , Adresse> adlhash = new HashMap< Integer , Adresse>();
		
		
		// Beispieldaten einfüllen
		adressliste.add(new Adresse("Alerich","Amann","3","4"));
		adressliste.add(new Adresse("Berta","Bfrau","3","4"));
		adressliste.add(new Adresse("Charlie","Code","3","4"));
		adressliste.add(new Adresse("Dieter","Amann","3","4"));

		// Jetzt einfach wieder ausgeben und dabei in einer Hash-Tabelle abspeichern
		for ( Iterator<Adresse> i = adressliste.iterator();  i.hasNext(); )
		{
			a = i.next(); 
			System.out.println("Adding HashCode "+a+" > "+a.hashCode());
			adlhash.put(a.hashCode(), a);
		}	

		// Jetzt wieder abrufen
		a = new Adresse("A","Amann","3","4");
		b = adlhash.get(a.hashCode());

		System.out.println("Suche "+a.hashCode()+" = "+b);
	
	}
}

Das Ergebnis ist erwartungsgemäß, dass er einen der beiden Treffer anzeigt.

Jetzt sollte er mir als "Bucket" ja eigentlich eine Liste von mehreren Treffern liefern. Angeblich ist das ja standard. Bloß jetzt habe ich nicht den Hauch einer Ahnung, wie ich an diese Ergebnisliste komme. Das Ergebnis ist ja schließlich nur ein Objekt vom Typ Adresse und nicht wieder eine Liste.

Wo geht's da weiter?

Danke im Voraus
 

btl1000

Mitglied
Jetzt habe ich gerade gesehen, dass er offenbar bereits beim Hinzufügen eines weiteren Wertes mit dem gleichen Key den alten Wert einfach überschreibt, statt einen weiteren anzuhängen.

Frage: Heißt dass, dass ich die Kollisionsbehandlung selbst bauen müsste, also insbesondere put entsprechend aufbohren im Sinne von "Wenn Key schon vorhanden, dann hänge Wert in einer Collection zu diesem Key an"? Das würde ja auch bedeuten, dass ich als Value immer eine Liste von Adressen nehmen müsste statt einer Adresse selbst.

Seh ich das richtig, oder gibt es das schon im Standard irgendwo fertig und ich habe es bloß nicht gefunden?
 

fastjack

Top Contributor
Dein Hashcode sollte alle Attribute in betracht ziehen, um eine Kollision zu vermeiden, nur Nachname ist ein bisschen wenig bei einer Adresse. Equals genauso, auf alle relevanten Attribute einer Adresse. Dann gehts.
 

btl1000

Mitglied
Dein Hashcode sollte alle Attribute in betracht ziehen, um eine Kollision zu vermeiden, nur Nachname ist ein bisschen wenig bei einer Adresse. Equals genauso, auf alle relevanten Attribute einer Adresse. Dann gehts.

Hmm.. aber dann bekomme ich ja keine Kollision hin.

Ich möchte ja gerade den Fall simulieren, dass die HashCode-Funktion zu schwach ist. Ich will also gerade den Fall provozieren, dass zu einem Hash mehr als ein Eintrag exisitiert. Im Buch war es eben so beschrieben, dass man denn eben statt eines Objektes eine Liste von gleichartigen Objekten zurückgibt. Jetzt ist ja nur die Frage, ob das schon implemntiert ist (wo?) oder ob ich das schön selbst implementiere.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
J Datentypen CSV to DB Leere Zellen in CSV mit Inhalt? Java Basics - Anfänger-Themen 11
H Universitätsaufgabe String inhalt Kontrollieren Java Basics - Anfänger-Themen 9
karlmasutra OOP Inhalt eines Array ausgeben lassen Java Basics - Anfänger-Themen 8
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
L Namensliste mit Array zeigt nicht den gewünschten Inhalt Java Basics - Anfänger-Themen 12
F Variablen JTextField-Inhalt kann nicht mit String abgeglichen werden Java Basics - Anfänger-Themen 2
Zeekay Development Methoden Methoden Inhalt Abhängig vom Objekt? Java Basics - Anfänger-Themen 9
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
R getrennte Objekte aus Klasse erstellen : warum Inhalt dann gleich ? Java Basics - Anfänger-Themen 2
Silvascus Inhalt eines externen Textdokuments an einen String übergeben Java Basics - Anfänger-Themen 2
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
K Variablenname soll der Inhalt vom String sein Java Basics - Anfänger-Themen 2
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
S Inhalt aus anderen Klassen verwenden Java Basics - Anfänger-Themen 1
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
M Wie gebe ich den Inhalt aus? Java Basics - Anfänger-Themen 17
K Inhalt von einer csv-Datei abspeichern Java Basics - Anfänger-Themen 3
P Seite auf Inhalt prüfen Java Basics - Anfänger-Themen 2
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
1 den Inhalt eines Arrays umdrehen Java Basics - Anfänger-Themen 11
A Leere Datei wird ohne Inhalt geschrieben, obwohl Inhalt geschrieben wurde. Java Basics - Anfänger-Themen 4
K Inhalt in den Zwischenspeicher legen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G Inhalt einer JTextArea wird nicht dargestellt Java Basics - Anfänger-Themen 8
J Inhalt in einem Text-File finden und in ein Array schreiben Java Basics - Anfänger-Themen 5
R Inhalt vom String größer oder kleiner als Java Basics - Anfänger-Themen 16
F Erste Schritte if Inhalt Java Basics - Anfänger-Themen 7
C Erste Schritte String-INhalt in TXT ausgeben Java Basics - Anfänger-Themen 7
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
U OOP Array vom Typ String > Inhalt ausgeben Java Basics - Anfänger-Themen 8
M Array Inhalt kopieren Java Basics - Anfänger-Themen 3
O Container Inhalt auslesen Java Basics - Anfänger-Themen 2
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
M String auf Inhalt überprüfen Java Basics - Anfänger-Themen 11
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
B Datentypen Inhalt von Objekten miteinander vergleichen Java Basics - Anfänger-Themen 2
I Mehrere ArrayLists mit einer for( : ) Schleife auf Inhalt prüfen Java Basics - Anfänger-Themen 6
R Erste Schritte Objekte mit anderen Objekten als Inhalt Java Basics - Anfänger-Themen 4
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
I Datei einlesen, Inhalt in MAP ablegen Java Basics - Anfänger-Themen 10
E Inhalt von Option Feldern auslesen? Java Basics - Anfänger-Themen 2
Helgon Inhalt - Aktualisierungs Problem Java Basics - Anfänger-Themen 7
T Inhalt Gridlayout wird nicht angezeigt Java Basics - Anfänger-Themen 6
O Variablen Variablen Inhalt von Webseite einlesen!? Java Basics - Anfänger-Themen 2
M Inhalt eines Strings um eins hochzählen Java Basics - Anfänger-Themen 19
M String Inhalt wird überschrieben (Subklassen verwenden denselben String) Java Basics - Anfänger-Themen 13
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
B jar Inhalt anzeigen Java Basics - Anfänger-Themen 5
H Input/Output Inhalt einer TextArea in Hex umwandeln Java Basics - Anfänger-Themen 10
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
J Inhalt eines Arrays vergleichen? Java Basics - Anfänger-Themen 8
X Collections Inhalt von zwei Collections prüfen Java Basics - Anfänger-Themen 4
D jTable befüllen mit dynamischem Inhalt Java Basics - Anfänger-Themen 11
M Inhalt Textfeld prüfen Java Basics - Anfänger-Themen 4
H Java-Fenster ohne Inhalt Java Basics - Anfänger-Themen 2
D Inhalt der Spalten einer Tabelle addieren Java Basics - Anfänger-Themen 4
E Inhalt zwischen zwei String auslesen? Java Basics - Anfänger-Themen 8
S Inhalt eines Vektors ausgeben Java Basics - Anfänger-Themen 2
F String-Inhalt als Datatype-Name Java Basics - Anfänger-Themen 5
D Inhalt einer Liste auf nur ein Wert überprüfen ohne die Liste komplett zu interieren Java Basics - Anfänger-Themen 6
M Tabelle mit immer sortiertem Inhalt Java Basics - Anfänger-Themen 5
S JFileChooser - Dateinamen vorschlagen/Inhalt der Ausgabe prüfen Java Basics - Anfänger-Themen 3
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
C Inhalt eines Strings in JLabel ausgeben? Java Basics - Anfänger-Themen 21
L Inhalt von JEditorPane löschen Java Basics - Anfänger-Themen 4
G Inhalt Jar-Files anzeigen, incl. Methoden Java Basics - Anfänger-Themen 2
D HashMap mit Inhalt kopieren Java Basics - Anfänger-Themen 8
M [J3D] Applet-Inhalt Speichern (Manipulationen etc. ...) Java Basics - Anfänger-Themen 2
X JTable --> Spaltenbreiter am dargestellten Inhalt anpassen Java Basics - Anfänger-Themen 4
C JPanel Inhalt anpassen Java Basics - Anfänger-Themen 4
P Objekte im Array speichern und auf den Inhalt zugreifen ? Java Basics - Anfänger-Themen 4
S Inhalt von GUI-Eingabe drucken Java Basics - Anfänger-Themen 7
Sweety JTable Inhalt löschen Java Basics - Anfänger-Themen 10
O OOP FileOutputStream überschreibt ganzen inhalt der txt Java Basics - Anfänger-Themen 4
K Inhalt eines Elements aus dem Objekt Array auslesen Java Basics - Anfänger-Themen 9
B mehrer comboboxes mit dem selben inhalt befüllen Java Basics - Anfänger-Themen 8
B Inhalt einer Datei ausgeben Java Basics - Anfänger-Themen 4
Z Verzeichnisse mit Inhalt löschen löschen Java Basics - Anfänger-Themen 7
B Datei Inhalt löschen Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben