Elemente in einer ArrayList anhand ID löschen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Wie kann man da vorgehen habe bis jetzt :

Code:
Collection c=new ArrayList();
		c.add(point);
		c.add(linie);
		c.add(sphere);
		c.add(triangle);
		System.out.println(c);
		    // delete Objekt Point
			c.remove(point);
			System.out.println(c);
		    // Objekt löschen anhand ID
			if(c.contains(){
				

nun weiß ich nicht weiter ich möchte ein Objekt löschen anhand einer ID wäre super wenn mir jm helfen könnte Danke.
 
S

SlaterB

Gast
Liste durchlaufen mit Iterator, Id jedes Elementes anschauen
und bei passender Id removen

einfacher gehts kaum, bei ner Map hat man den direkten Zugriff,
bei der Liste nur die equals()-Operation,
wenn die für alle enthaltenen Objekte mitspielt und (nur) die Id vergleicht,
dann könntest du natürlich ein Dummy-Objekt mit der Id aus der Liste removen
 

Niki

Top Contributor
equals und hashCode Methoden der Objekte überschreiben, dann kannst du direkt mit remove(Object) das Objekt löschen
 
S

SlaterB

Gast
Anmerkung:
remove(Object) funktioniert ja schon,

hashCode() hat strenggenommen nix damit zu tun,
ist aber natürlich besser konform zu equals() , so vorgeschrieben
 
G

Guest

Gast
Was macht die Funktion hashCode denn?
Also wie ich die ArrayList durchlaufe mit dem Iterator weiß ich nun allerdings komm ich noch nicht drauf wie ich einen Vergleich durchführen soll um die ID zu vergleichen mit dem Objekt und dies dann zu löschen :(
 

Niki

Top Contributor
die hashCode Methode liefert anhand deiner Attribute einen hashCode zurück. Dabei gilt sind zwei Objekte gleich (also equal) so muss die hashCode Methode den selben Wert zurück liefern. Bei ungleichen Objekten muss die hashCode Methode nicht unterschiedliche Werte zurück liefern. Die Methode wird verwendet um Objekte in hash-Klassen wie HashMap, HashSet ... zu verwalten. Der hash-Wert sagt aus, in welchem Segment ein Objekt abgelegt wird. Dadurch kann auf Objekte schneller zugegriffen werden. Du kannst das wie ein Bücherregal sehen. Theoretisch können alle Objekte auch 1 als hashWert zurück liefern, sinnvoll ist das aber nicht, da natürlich länger gesucht werden muss, bis das gewünschte Objekt gefunden werden kann.
 
S

SlaterB

Gast
hashCode() hat wie gesagt zumindest bei Listen nix zu sagen,
beim equals ist sogar nur das equals des Dummy-Objektes wichtig, wie ich gerade sehe,
z.B.
Code:
public class Test
{
    public static void main(String[] args)
    {
        List l = new ArrayList();
        l.add(new A());
        l.add(new B());
        System.out.println(l);
        l.remove(new Object());
        System.out.println(l);
        l.remove(new X()
            {
                public int getId()
                {
                    return 4;
                }

                public boolean equals(Object o)
                {
                    if (!X.class.isInstance(o))
                    {
                        return false;
                    }
                    return getId() == ((X)o).getId();
                }
            });
        System.out.println(l);
        l.remove(new X()
            {
                public int getId()
                {
                    return 7;
                }

                public boolean equals(Object o)
                {
                    if (!X.class.isInstance(o))
                    {
                        return false;
                    }
                    return getId() == ((X)o).getId();
                }
            });
        System.out.println(l);
    }

}


interface X
{
    public int getId();
}


class A
    implements X
{

    public int getId()
    {
        return 5;
    }
}


class B
    implements X
{

    public int getId()
    {
        return 7;
    }
}

bei mehrmaligen Gebrauch besser eine eigende Dummy-Klasse statt eines anonymen Objektes in meinem Beispiel
 
G

Guest

Gast
Also ich schicke mal einen Teilcode von mir :

Das ist die Klasse des Objekte Punkt

Code:
public class Point extends Objekteverwaltung implements Serializable{

	/**
	 * @param args
	 */
	protected int x;
	protected int y;
	protected int z;
	
	public Point(String name,int ID,int x,int y,int z){
		setName(name);
		setID(ID);
		setX(x);
		setY(y);
		setZ(z);
	}
public void setName(String name){
	this.name=name;
}
public String getName(){
	return name;
}
public void setID(int ID){
	this.ID=ID;
}
public int getID(){
	return ID;
}
public void setX(int x){
	this.x=x;
}
public int getX(){
	return x;
}
public void setY(int y){
	this.y=y;
	}
public int getY(){
	return y;
}
	public void setZ(int z){
		this.z=z;
	}
		public int getZ(){
			return z;
		}
		public String toString(){
			return "Objekt:"+name+" "+"ID:"+ID+" "+"Koordinaten:"+x+" "+y+" "+z;
		}
		// Function hinzufuegen
		public boolean hinzufuegen(){
			Scanner eingabe=new Scanner(System.in);
			try{
				System.out.println("Objektname: ");
				name=eingabe.next();
				System.out.println("ID: ");
				ID=eingabe.nextInt();
				System.out.println("Koordinate: ");
				x=eingabe.nextInt();
				System.out.println("Punkt: ");
				y=eingabe.nextInt();
				System.out.println("Punkt: ");
				z=eingabe.nextInt();
				return true;
			}
			catch (Exception e){
				return false;
			}
			
		}
		// Anzeige Funktion
		public boolean anzeigen(){
			System.out.println("Objektename:"+name+"ID: "+ID+"Punkte: "+x+y+z);
			return true;
			}
 
G

Guest

Gast
Jetzt die Main Klasse

Code:
public static void main(String[] args) {
		// Object Point construction
		Point point=new Point("Punkt",10,20,30,40);
		System.out.println("Objekt:"+point.getName()+ ",ID:"+point.getID()+ ",Koordinaten:"+ point.getX()+","+point.getY()+","+point.getZ());
		System.out.println(point.toString());
		// Object Line construction
		Linie linie=new Linie("Linie",20,5,10);
		System.out.println(linie.toString());		
		//Object Sphere construction
		Sphere sphere=new Sphere("Kugel",30,3,1,"gelb");
		System.out.println(sphere.toString());
		// Object Triangle construction
		Triangle triangle=new Triangle("Dreieck",40,50,-25,-40,"pink");
		System.out.println(triangle.toString());
		// Objekte hinzufügen und anzeigen lassen
		linie.hinzufuegen();
		linie.anzeigen();
		// ArrayList erstellen
		Collection c=new ArrayList();
		c.add(point);
		c.add(linie);
		c.add(sphere);
		c.add(triangle);
		System.out.println(c);
		    // delete Objekt Point
			c.remove(point);
			System.out.println(c);
		    // Objekt suchen (Iterator holen)
			Iterator it=c.iterator();
		    if(it.equals(){
		    }
 
S

SlaterB

Gast
ohne Denken geht das nicht, ich hab schon zuviel verraten,
es bei dir einbauen werde ich zumindest nicht ;)
 
S

SlaterB

Gast
wodrauf willst du kommen? beschreibe doch in Worten dein Problem,
wie man grundsätzlich ein Dummy-Objekt praktisch nur mit einer equals-Operation erstellt, steht doch in meinem Beispiel
 
G

Guest

Gast
was ich nicht verstehe ist : muss ich ein neue Interface Klasse machen wie bei dir ? und zweitens wieso gibst du bei der getID() Methode die Werte 5 oder 7 zurück ?
 

Final_guy

Aktives Mitglied
Warum machst du es dir denn so schwer? Nimm doch einfach eine Datenstruktur, die zu deinen Erfordernissen passt. Wie SlaterB bereits vor einigen Post angemerkt hat, wäre eine Implementation von java.util.Map mit der ID als Schlüssel eine sehr einfache und elegante Lösung.

Oder gibt es strenge Bedingungen, dass Du keine Map benutzen darfst? (Aus welchem Grunde auch immer)
 
S

SlaterB

Gast
ansonsten

> wieso gibst du bei der getID() Methode die Werte 5 oder 7 zurück?

ist doch nur eine Testklasse, irgendeine Id wird zurückgegeben,
bei dir sind die Operationen doch sicherlich vorhanden

> muss ich ein neue Interface Klasse machen wie bei dir ?

wenn alle Klassen Objekteverwaltung implementieren, dann ist das dein Interface und gut,
es geht aber auch ganz ohne irgendein Interface, das Dummy-Objekt müsste gar keins implementieren
und in equals schauen ob das andere Objekt ein Point ist, ein Triangle usw.

also: alle Klassen einzeln testen oder das darüberliegende Interface/ Klasse
 
G

Guest

Gast
So habe statt der ArrayList jetzt eine HasMap implentiert ;)

Code:
HashMap map=new HashMap();
		map.put("10",point);
		map.put("20",linie);
		map.put("30",sphere);
		map.put("40",triangle);
		System.out.println(map);
		map.remove("30");
		if (map.containsKey("10"))
		System.out.println("Wert wurde gefunden: "+point);
		else 
			System.out.println("Wert wurde nicht gefunden!");
	}

So kann ich dann anhand der Schlüssel die Objekte löschen bzw nachschauen ob Sie existieren. Jetzt soll ich noch eine Filterfunktion implementieren das mir zum Beispiel nur das Objekt Punkte ausgibt oder Linien oder was auch immer womit könnte man das machen ? Danke für eure Hilfe .
 
S

SlaterB

Gast
Value-Set durchlaufen (sie API der Map um dahin zukommen),
Typ prüfen, passende Objekte in eine Liste schreiben oder direkt ausgeben
 

Final_guy

Aktives Mitglied
Oder Du hälst eine separate Map für jede der Klassen. Damit wäre der Filter trivial nur müsstest Du dann bei den Abfragen nach ID eben soviel Maps abfragen, wie es relevante Klassen gibt. Was effizienter ist, hängt vom konkreten Fall (wieviele Zielklassen) ab.

Noch ein Hinweis: Achte doch bitte beim schreiben darauf, dass Du deinen normalen Text nicht innerhalb des CODE-Blocks schreibst. Ich kann nur für mich sprechen, aber dieses überbreite Format durch fehlende Zeilenumbrüche nervt ein wenig ... :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
E Elemente einer (öffentlichen) ArrayList in einer anderen Klasse zu einer ArrayList dazu fügen. Java Basics - Anfänger-Themen 7
S Bestimmte Elemente einer ArrayList löschen Java Basics - Anfänger-Themen 3
G Häufigkeit der Elemente in einer ArrayList zählen Java Basics - Anfänger-Themen 2
K Kombinationen der Elemente einer ArrayList Java Basics - Anfänger-Themen 4
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
S JPA / Elemente einer Liste ansprechen Java Basics - Anfänger-Themen 5
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
M wie kann ich am besten die kleinste 2 elemente von einer Liste kriegen Java Basics - Anfänger-Themen 4
D Elemente einer Liste Java Basics - Anfänger-Themen 23
T Mehrere Elemente in einer HashMap? Java Basics - Anfänger-Themen 2
D Elemente einer Map vergleichen Java Basics - Anfänger-Themen 8
O Elemente zu einer List adden - vereinfachen Java Basics - Anfänger-Themen 14
R Elemente einer .txt hinzufügen und nicht überschreiben Java Basics - Anfänger-Themen 10
S Elemente einer Liste mit true / false Werten Java Basics - Anfänger-Themen 3
0x7F800000 Elemente einer Äquivalenzklasse bzgl einer Ordnung vereinen? Java Basics - Anfänger-Themen 18
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
G Anzahl der Elemente einer Liste ausgeben Java Basics - Anfänger-Themen 15
T Aus Elemente einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 11
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
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
A Elemente in einem Array Java Basics - Anfänger-Themen 5
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
M aus x Elementen y Elemente auswählen Java Basics - Anfänger-Themen 6
J Eingabe Elemente Aktivieren Java Basics - Anfänger-Themen 2
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Neue Themen


Oben