Remove from an AraayList

Status
Nicht offen für weitere Antworten.

Ebenius

Top Contributor
Bei allen datenhaltenden Klassen solltest Du ─ bzw. Du musst, wenn Du sie vernünftig mit Collections verwenden können willst ─ equals() und hashCode() überschreiben. Außerdem sollte man auch immer toString() überschreiben, um vernünftige Ausgaben machen zu können.
 

Java-Problems

Bekanntes Mitglied
sind diese Methoden nicht schon vordefiniert?
Warum sollte ich die verändern?
Wie kann mir das bei meinem Problem mit dem Löschen eines Objektes helfen?
 

Der Müde Joe

Top Contributor
>sind diese Methoden nicht schon vordefiniert?

werden von Object definiert, müssen von dir überschrieben werden

>Warum sollte ich die verändern?

damit du zB list.contains(rezept) schreiben kannst, oder list.remove(rezept), Der Rest erledigt dir die Liste: sie sucht anhand equals bzw hashcode das passende Objekt, welches identisch bzw den gleichen hashCode hat:
zB:
Code:
while(list.contains(rezept) { list.remove(rezept)}
Entferne alle vorkommen von rezept inder Liste
 

Ebenius

Top Contributor
Java-Problems hat gesagt.:
sind diese Methoden nicht schon vordefiniert?
Ja. Sie überprüfen auf Instanzgleichheit (also auf Identität). Sie sollen aber auf inhaltliche Gleichheit prüfen. Und das kann die Standard-Implementierung natürlich nicht gewährleisten. Steht auch in der API-Doc mit drinnen.

Java-Problems hat gesagt.:
Warum sollte ich die verändern?
Dafür sind sie gedacht.

Java-Problems hat gesagt.:
Wie kann mir das bei meinem Problem mit dem Löschen eines Objektes helfen?
Habe gerade nochmal in Deinem Code oben nachgelesen. In dem Beispiel aus der main()-Methode hilft es Dir nicht, weil Du tatsächlich die gleiche Instanz wieder löschst. :-( Trotzdem solltest Du's machen. Weil's besser ist.

Zum ganz konkreten Problem: Lass Dir doch in der Schleife (in remove) mal ausgeben, ob ein Rezept gefunden wurde...

Zum Programm: Da ergibt einiges keinen Sinn. Zum Beispiel die Methode remove(Recipe)... Wieso bekommt die ein Recipe übergeben? Du benutzt es gar nicht, sondern fragst den Nutzer irgendwelche Sachen. Das ergibt keinen Sinn. Selbst wenn Du den Recipe-Parameter wegnehmen würdest, wäre es hässlicher Stil, da eine datenhaltende Klasse keine Eingaben vom Nutzer verlangt. Das macht man außerhalb der Klasse.
 
S

SlaterB

Gast
in diesem Fall funktioniert also bereits das remove(),
nur gibts du (genau wie im letzten Thread) gar nicht den Inhalt der Liste aus, sondern irgendwas anderes, nämlich das Recipe selber,

davon, dass das Recipe erfolgreich aus einer Liste entfernt wurde, ändert sich doch nicht die Ausgabe das Recipe selber..,
du musst z.B. die Anzahl der Elemente der Liste ausgeben
 

Java-Problems

Bekanntes Mitglied
Ebenius hat gesagt.:
Zum Programm: Da ergibt einiges keinen Sinn. Zum Beispiel die Methode remove(Recipe)... Wieso bekommt die ein Recipe übergeben? Du benutzt es gar nicht, sondern fragst den Nutzer irgendwelche Sachen. Das ergibt keinen Sinn. Selbst wenn Du den Recipe-Parameter wegnehmen würdest, wäre es hässlicher Stil, da eine datenhaltende Klasse keine Eingaben vom Nutzer verlangt. Das macht man außerhalb der Klasse.

Sorry, aber so wurde die Methode vorgegeben und diese darf ich nicht verändern...
Die Eingaben etc. mach ich also in der main-Methode, oder wie?
 
S

SlaterB

Gast
bei add hattest du es doch früher auch so:
Parameter ignorieren, innerhalb von add() neues Recipe abfragen per IOTools,
das war auch komisch und inzwischen hast du es teilweise geändert:
nun wird in add() das übergebene Recipe genutzt, nur noch seltsamerweise an dieser Stelle nach den Zutaten gefragt,

warum machst du das bei remove() nicht genauso?
verwende das übergebe Recipe statt innerhalb von remove() den User per IOTools zu fragen

-----

die IOTools-Aufrufe innerhalb des Recipe-Konstruktors sind natürlich fast noch schlimmer,
besser wäre eine spezielle Methode, nicht direkt in der main, sondern eine Methode createReceipeAskingUser(),

allerdings möchtest du zum remove() eine andere Frage stellen, das wäre dann etwas aufwendig,
erstmal eine Methode
createReceipeToRemoveAskingUser()
dann das Recipen an remove() übergeben, dann dort wie bisher den Namen rausholen und manuell mit allen Recipes
in der Liste vergleichen oder doch besser equals() überschreiben (für Prinzipienreiter auch hashcode())

etwas zu aufwendig, besser wäre für remove() dann vielleicht eher, einen String name zu übergeben
oder den Namen doch in einer speziellen remove()-Methode abzufragen,

aber du hast ja, wie du sein 20 Threads erwähnst, deine vorgegeben Interface..
Vorgaben, deren Sinn man nicht versteht, sind wirklich hinderlich..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb remove in for Java Basics - Anfänger-Themen 5
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
D remove arraylist by id not work Java Basics - Anfänger-Themen 6
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
B Sorting List und Remove Java Basics - Anfänger-Themen 2
P Map - remove() ? Java Basics - Anfänger-Themen 46
Hacer remove at index Java Basics - Anfänger-Themen 31
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Vererbung remove elment from Array Java Basics - Anfänger-Themen 0
J easy remove method Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
U PriorityQueue remove Java Basics - Anfänger-Themen 2
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
B map.remove(long) Java Basics - Anfänger-Themen 5
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
B LinkedList remove Java Basics - Anfänger-Themen 5
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
W Treemap remove Java Basics - Anfänger-Themen 5
H Remove Methode von List Java Basics - Anfänger-Themen 6
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
C Datentypen ArrayList.remove(index) hinterlässt leeres Feld Java Basics - Anfänger-Themen 5
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
S OOP ArrayList Klasse nachbauen, prob mit remove Java Basics - Anfänger-Themen 5
U ArrayList.remove(i) funktioniert nicht Java Basics - Anfänger-Themen 9
J Iterator remove()? Java Basics - Anfänger-Themen 5
T ArrayList#remove Java Basics - Anfänger-Themen 8
M ArrayList remove Element? Java Basics - Anfänger-Themen 3
B HashMap remove Java Basics - Anfänger-Themen 2
J TreeSet methode Remove Java Basics - Anfänger-Themen 13
C Add / Remove Panel Java Basics - Anfänger-Themen 2
J remove Problem Java Basics - Anfänger-Themen 8
M remove()-Methode eines Iterators Java Basics - Anfänger-Themen 3
megachucky remove bei Vector klappt nicht Java Basics - Anfänger-Themen 11
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben