Bestimmte Objekte einer Liste hinzufügen

internet

Top Contributor
Hallo zusammen,
Ich habe ein Textfile.
Ich habe eine Liste (Linked List).
Ich möchte in diese Liste Objekte speichern.

Nun möchte ich aber überprüfen, ob ein bestimmter String schon in der Liste vorhanden ist.
Zum Beispiel:
Ich habe einige Personen.
Ist in der Liste bereits eine Person, die den Namen "Meier" hat, dann soll dieses Objekt nicht der Liste hinzugefügt werden.

Wie kann ich das machen?
 

neela

Bekanntes Mitglied
lass dir einfach aus der liste die entsprechende Objekte ausgeben wenn nix zurück kommt is die person noch nicht vorhanden
Java:
(Person)list.get("Maier" )
if (person=null){
//ist sie noch nicht vorhanden
}
 
N

nillehammer

Gast
neela hat gesagt.:
(Person)list.get("Maier" )
if (person=null){
//ist sie noch nicht vorhanden
}
Das ist Blödsinn. Bei List gibt es so eine Methode nicht. Get geht nur über den Index.

Wenn Du Personen in dieser List speicherst, musst Du equals() und hashCode() der Klasse Person so überschreiben, dass sie bei Namensgleichheit true/denselben hash Code zurück liefern. Dann kannst du die Methode contains(..) des List-Interface verwenden.
 
B

bygones

Gast
Das ist Blödsinn. Bei List gibt es so eine Methode nicht. Get geht nur über den Index.

Wenn Du Personen in dieser List speicherst, musst Du equals() und hashCode() der Klasse Person so überschreiben, dass sie bei Namensgleichheit true/denselben hash Code zurück liefern. Dann kannst du die Methode contains(..) des List-Interface verwenden.

was aber auch nur sinn macht, wenn das zu suchende element ebenso vom selben Typ ist. Wenn man nur per String auf etwas sucht und nicht gleich das ganze objekt erzeugen will.

Bei einer LinkedList waere ein indexbasierter zugriff so und so eklatant, einfach ueber die Liste iterieren und den gewuenschten Vergleich anstellen
 

obb

Mitglied
Um das ganze noch zu präzisieren: Ich halte den Beitrag von faetzminator ebenfalls für eleganter. Da Du aber wahrscheinlich Objekte vom Typ
Code:
Person
in der Liste speicherst, ist damit noch nicht alles getan.​
Wenn Du Dir die Beschreibung der contains-Methode etwas genauer anschaust, siehst Du, dass das Dein Objekt über die equals-Methode mit den Objekten der Liste verglichen wird. Die contains-Methode liefert also dann
Code:
true
zurück, wenn
Code:
deinObjekt.equals(listenobjekt)
ebenfalls
Code:
true
zurückgibt.​
Was also noch zu tun bleibt, ist die equals-Methode in Deiner Klasse
Code:
Person
zu überschreiben. Hier mal ein KSKB dazu:
Java:
public class Person {
	String name;
	
	public Person(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		Person theOtherPerson = (Person) obj;
		if(this.name.equals(theOtherPerson.name))
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) {
		Person p1 = new Person("Maier");
		Person p2 = new Person("Maier");
		Person p3 = new Person("Schmitz");
		
		System.out.println("Maier.equals(Schmitz): " + p1.equals(p3));
		System.out.println("Maier.equals(Maier): " + p1.equals(p2));
	}
}
Jetzt bist du fertig und kannst Personen aus deiner liste mit anderen Personen über die contains-Methode vergleichen.​
Noch etwas: Da ich in meinem Beispiel in der equals-Methode die Objekte zu
Code:
Person
-Objekten caste, könntest Du in Schwierigkeiten kommen, wenn Du in der Liste Objekte mit unterschiedlichen Datentypen speicherst. Sollte das der Fall sein, muss die eqals-Methode vielleicht ein bisschen komplizierter aufgezogen werden. Ich halte es aber in den meisten Fällen für sehr ratsam, in einer Liste nur Objekte von einem Datentyp zu speichern (
Code:
LinkedList<Person>
). Wenn Du also Objekte mit unterschiedlichen Datentypen in der Liste speicherst, dann solltest Du Dein Design vielleicht nochmal überdenken.​
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Ich würde equals etwa so implementieren (mit der Klasse [c]Foo[/c] und dem Feld [c]field[/c]):
Java:
@Override
public boolean equals(Object obj) {
    if (this == obj) { // für die Geschwindigkeit!
        return true;
    }
    if (obj == null || getClass() != obj.getClass()) { // wem ein instanceof lieber ist, kann natürlich auch das verwenden ;)
        return false;
    }
    Foo other = (Foo) obj;
    if (field == null) {
        return other.field == null;
    }
    return field.equals(other.field);
}
Da fliegen keine NPE's und ClassCastExceptions ;)

Edit:
Da man anscheinend in vielen Projekten die Apache Commons verwendet, kann man natürlich auch die jeweiligen Methoden derer Libs verwenden. Also z.B. für Strings ein [c]return StringUtils.equals(field, other.field)[/c].
 
Zuletzt bearbeitet:

obb

Mitglied
Ich find es gut wenn manchmal solche Sachen wie NPEs und ClassCastExceptions fliegen. Da wird einem meistens klar, dass man beim Coden gerade ziemlichen Mist gebaut hat ;). Ansonsten find ich die Methode top! Gerade, wenn man Objekte von anderen benutzt und keine Ahnung hat, was da wieder alles verbrochen wurde :).
 

faetzminator

Gesperrter Benutzer
Ich find es gut wenn manchmal solche Sachen wie NPEs und ClassCastExceptions fliegen [...]

Ich fände es besser, wenn mit Generics oder einer anderen Magie die Signatur irgendwie auf den Typen eingeschränkt werden könnte. Ich hab sowas vor einiger Zeit mit Generics versucht, aber leider bring ich es ohne Parametrisierung ([c]SomeAction extends Action<SomeBean, SomeController, ...>[/c]) nicht hin.
 
M

maki

Gast
Ich find es gut wenn manchmal solche Sachen wie NPEs und ClassCastExceptions fliegen. Da wird einem meistens klar, dass man beim Coden gerade ziemlichen Mist gebaut hat ;).
Ich finde es besser, wenn Verträge einghalten werden.

equals darf weder eine NPE noch eine ClassCastException werfen laut API, dafür sollte man aber auch die hashcode Methode überschreiben falls man sich schon an equals wagt ;)

Das verhalten von Standardmethoden soweit abzuändern ist sicher keine gute Idee...

Unittests sind gut geeignet um herauszufinden ob man ziemlichen Mist gebaut hat ;)
 

obb

Mitglied
Ich finde es besser, wenn Verträge einghalten werden.

equals darf weder eine NPE noch eine ClassCastException werfen laut API, dafür sollte man aber auch die hashcode Methode überschreiben falls man sich schon an equals wagt
Stimmt! Da habe ich mal wieder nicht genau nachgelesen. Ansonsten halte ich es für extrem sinnvoll übergaben von
Code:
null
mit einer Exception zu quittieren, da das ein eindeutiger Hinweis auf Fehlverhalten eines Systems oder Pfusch ist.
 

faetzminator

Gesperrter Benutzer
Ansonsten halte ich es für extrem sinnvoll übergaben von
Code:
null
mit einer Exception zu quittieren, da das ein eindeutiger Hinweis auf Fehlverhalten eines Systems oder Pfusch ist.

Nicht zwingend. Es gibt immer wieder Situationen, in denen [c]null[/c] ebenfalls ein valider Status ist. Nehmen wir String als Beispiel: Ist für dich "" (leer) das gleiche wie null ("nicht vorhanden")? Für mich nicht.
 
M

maki

Gast
Ansonsten halte ich es für extrem sinnvoll übergaben von
Code:
null
mit einer Exception zu quittieren, da das ein eindeutiger Hinweis auf Fehlverhalten eines Systems oder Pfusch ist.
Das sehe ich auch so.

null sollte man als validen returnwert vermeiden falls möglich imho, alternativen sind zB. das sog. NullObject, falls möglich.
 

internet

Top Contributor
So.
Ich habe jetzt mal die equals - Methode in der Klasse implementiert.
Sofern die ID gleich ist, dann fügt er diese auch nicht ein, ABER:

Bsp:
Das erste Objekt in der Liste ist: 12345
Die id ist 12345
=> Wird nicht eingefügt

Ist nun das Objekt in der Liste: 12345
Die Id 54321
=> Wird eingefügt

ABER:
Ist das Objekt nun in der Liste 54321
Die ID 12345
=> Wird diese ID trotzdem eingefügt, obwohl sie schon in der Liste ist.

Das liegt daran, dass er ja einzeln die Objekte prüft.
Also erst das erste Element in der Liste usw.

Wie kann das aber anstellen, dass er mir sozusagen alle Objekte in der Liste durchgeht und prüft, ob ein Element mit dem Attribut (String) zB: 12345
schon exisitert ?



Das ist der bisherige Code:
Er geht also Zeile für Zeile durch

Code:
while (sZeile != null) {
				sZeile = bReader.readLine();			

				try {
					// Nur Zeilen suchen mit "id"
					if (suchString != null) {
						if (sZeile.contains(suchString)) {


							// Sofern die  Liste leer ist, dann erstes Objekt hinzufügen
							if(idList.isEmpty()){
								Session session = new Session(id);
								idList.add(session);
							}				
							
							// Prüfen, ob es die ID schon gibt in der Liste gibt
							// Wenn nein, dann hinzuzufügen
							for(int i=0; i<idList.size();i++){	
								
								try{
									if(!idList.get(i).getSessionId().equals(id)){									
										Session session = new Session(id);
										idList.add(session);
									}
										
								}
								catch(NullPointerException e){
									e.printStackTrace();
								}
							}
						}
					}
 

obb

Mitglied
Ich glaube, da haben wir uns etwas falsch verstanden. Schau Dir nochmal die contains-Methode im Interface List an. Die ruft schon für jedes Objekt in Deiner Liste die equals-Methode auf. Was Dir zu tun bleibt, ist die equals-Methode in Deiner Klasse "Session" zu überschreiben. Danach kannst Du folgenden Block
Java:
// Prüfen, ob es die ID schon gibt in der Liste gibt
// Wenn nein, dann hinzuzufügen
for(int i=0; i<idList.size();i++) {	
	try {
		if(!idList.get(i).getSessionId().equals(id)) {									
			Session session = new Session(id);
			idList.add(session);
		}								
	}
	catch(NullPointerException e) {
		e.printStackTrace();
	}
}
abändern in
Java:
Session session = new Session(id);
if(!idList.contains(session))
	idList.add(session);
Dadurch müsste Dein Problem gelöst werden.
Noch etwas: Wenn Du Code einfügst, dann packe ihn bitte in
Java:
-Tags und rücke ihn sinnvoll ein, damit er übersichtlicher wird.
 

obb

Mitglied
Nicht zwingend. Es gibt immer wieder Situationen, in denen
Code:
null
ebenfalls ein valider Status ist. Nehmen wir String als Beispiel: Ist für dich "" (leer) das gleiche wie
Code:
null
("nicht vorhanden")? Für mich nicht.
Für mich ist das natürlich auch nicht das gleiche. Trotzdem rechtfertigt das nicht,
Code:
null
an irgendwelche Methoden zu übergeben. Die lassen sich nämlich so überladen, dass sie auch ohne Argumente funktionieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
W bestimmte Objekte in ArrayList auslesen Java Basics - Anfänger-Themen 8
S Bestimmte Objekte aus Collections anwählen/herausbekommen Java Basics - Anfänger-Themen 8
H bestimmte objekte in ArrayList löschen? Java Basics - Anfänger-Themen 7
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
HighLife Bestimmte Werte aus Array zählen Java Basics - Anfänger-Themen 15
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
B Von Array nur eine bestimmte Anzahl bekommen Java Basics - Anfänger-Themen 3
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
B Denkanstoß benötigt: Emails an bestimmte Emailadresse schicken Java Basics - Anfänger-Themen 6
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
L String auf bestimmte zeichen untersuchen Java Basics - Anfänger-Themen 9
L Bestimmte Werte eines Arrays ausgeben. Java Basics - Anfänger-Themen 3
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
Henri Bestimmte Werte eine XML-Datei ausgeben. Java Basics - Anfänger-Themen 8
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
A Threads Threads bestimmte Aufgaben zuweisen... Java Basics - Anfänger-Themen 3
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
N Bestimmte Zeichen eines Strings umwandeln Java Basics - Anfänger-Themen 4
K Eine bestimmte Zeit, eine Schleife laufen lassen. Java Basics - Anfänger-Themen 4
A CSV datei eine Bestimmte Zeile ansprechen Java Basics - Anfänger-Themen 1
W char-Array auf bestimmte Zeichen prüfen Java Basics - Anfänger-Themen 10
C Array kopieren und nur bestimmte Werte speichern Java Basics - Anfänger-Themen 6
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
N Bestimmte Inhalte aus Datei lesen Java Basics - Anfänger-Themen 11
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
B Best Practice Bestimmte Zahl auslesen und in Variable speichern Java Basics - Anfänger-Themen 3
N Bestimmte Zeile aus einer Datei auslesen Java Basics - Anfänger-Themen 10
I Int Array, Zahl an bestimmte position setzten Java Basics - Anfänger-Themen 2
C [Bukkit Plugin] Blöcke eine bestimmte route entlang fliegen Java Basics - Anfänger-Themen 3
A Button in eine bestimmte Spalte platzieren Java Basics - Anfänger-Themen 4
D Bestimmte Zeile aus TXT Datei ausgeben Java Basics - Anfänger-Themen 4
A Eine Datei Lesen und bestimmte Position überschreiben Java Basics - Anfänger-Themen 2
M Bestimmte Zeichen auslesen Java Basics - Anfänger-Themen 2
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
G JTextArea: nur bestimmte Zeilen anders formatieren Java Basics - Anfänger-Themen 7
B Input/Output bestimmte Zeilen in .txt Dateinen überschreiben Java Basics - Anfänger-Themen 20
J Bestimmte Anzahl Zeichen aneinander fügen Java Basics - Anfänger-Themen 9
C Bestimmte Informationen von Webseite suchen Java Basics - Anfänger-Themen 13
B Nur bestimmte Klasse ausführen Java Basics - Anfänger-Themen 6
Kenan89 Bestimmte Zeile in txt-Datei ersetzen Java Basics - Anfänger-Themen 4
D BufferedInputStream nur bestimmte Zeichen Java Basics - Anfänger-Themen 11
D Input/Output bestimmte Zeile auslesen Java Basics - Anfänger-Themen 3
B Bestimmte Ziffer Java Basics - Anfänger-Themen 27
B Input/Output In Datei an eine bestimmte Stelle schreiben Java Basics - Anfänger-Themen 37
R Bestimmte Stellen eines BigInteger Java Basics - Anfänger-Themen 7
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
S Bestimmte Methode von unbestimmter Datei Java Basics - Anfänger-Themen 6
V Bestimmte Stellen aus .txt Datei auslesen Java Basics - Anfänger-Themen 11
B bestimmte klammern im string ersetzten Java Basics - Anfänger-Themen 17
Binary.Coder JTable bzw. Tabelle in bestimmte Form überführen Java Basics - Anfänger-Themen 5
B Bestimmte Werte aus einem String entnehmen Java Basics - Anfänger-Themen 3
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
X im Verzeichnissbaum recursiv nur bestimmte Dateien finden Java Basics - Anfänger-Themen 7
M Aus String bestimmte Inhalte auslesen Java Basics - Anfänger-Themen 8
M Reaktion auf bestimmte Zeit Java Basics - Anfänger-Themen 2
2 Bestimmte Anzahl von Bytes lesen und als string ausgeben? Java Basics - Anfänger-Themen 3
N Bestimmte Zeichen aus Strings zählen Java Basics - Anfänger-Themen 11
P Bestimmte Zeilen einer Datei ermitteln ? Java Basics - Anfänger-Themen 30
StrikeTom Bestimmte stelle in string herausfiltern Java Basics - Anfänger-Themen 7
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
E Bild eine bestimmte Anzahl blinken lassen Java Basics - Anfänger-Themen 3
B array bestimmte summe berechnen Java Basics - Anfänger-Themen 4
Luk10 Zufallszahl "ohne" eine bestimmte Zahl(en) Java Basics - Anfänger-Themen 8
S OOP Wie bei Spiel "17+4" eine Karte an bestimmte Position hinzufügen Java Basics - Anfänger-Themen 13
B OOP String auf bestimmte Zeichen abfragen Java Basics - Anfänger-Themen 4
S Bestimmte Elemente einer ArrayList löschen Java Basics - Anfänger-Themen 3
S Double bis bestimmte Nachkommzahl vergleichen (ohne zusätzliche Libs) Java Basics - Anfänger-Themen 12
Ollek Bestimmte Zeilen aus einer HTML Datei lesen Java Basics - Anfänger-Themen 8
N Text an bestimmte Stelle eines Dokuments schreiben Java Basics - Anfänger-Themen 6
G Bestimmte Zeile aus CSV ausgeben Java Basics - Anfänger-Themen 14
Assassin Nur bestimmte Daten aus txt auslesen... Java Basics - Anfänger-Themen 12
Developer_X Durch int Bestimmte Zeile überschreiben Java Basics - Anfänger-Themen 16
Developer_X Bestimmte Zeile aus TextDocument lesen Java Basics - Anfänger-Themen 2
V Nur bestimmte Werte zulassen Java Basics - Anfänger-Themen 2
M Bestimmte zeile aus .txt einlesen Java Basics - Anfänger-Themen 6
Q Nach Stringvorgabe bestimmte funktionen ausführen Java Basics - Anfänger-Themen 3
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
I bestimmte Zahlen markieren.helppp. Java Basics - Anfänger-Themen 17
G Bestimmte Position im array auslesen Java Basics - Anfänger-Themen 8
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
M bestimmte Zeichen in String eliminieren Java Basics - Anfänger-Themen 2
T Bestimmte Zeile aus einer .txt-Datei auslesen? Java Basics - Anfänger-Themen 10
S Bestimmte Anzahl an nummern auslesen Java Basics - Anfänger-Themen 4
K bestimmte Dateien aus Ordner verschieben Java Basics - Anfänger-Themen 5
F Bestimmte Werte nicht beachten Java Basics - Anfänger-Themen 10
G bestimmte Stelle aus Textdatei auslesen. Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben