LinkedList Remove



  • Hi, ich habe da eine Frage zur remove-Methode der Klasse LinkedList.
    Folgendes Beispiel:

    class Klasse1 {
    
        int x = 0;
        int y = 0;
    
        public Klasse1(int x, int y) {
            this.x = x;
            this.y = y:
        }
    }
    
    class Klasse2 {
    
        String name = "Name";
    
        public Klasse2(String name) {
            this.name = name;
        }
    }
    
    ...
    
    Klasse1[] k = new Klasse1[10]; // nehmen wir mal an, alle wären initialisiert
    Klasse2[] k2 = new Klasse2[10]; // diese auch
    
    LinkedList list = new LinkedList();
    list.add(k);
    list.add(k2);
    Klasse2 k3 = new Klasse2("Name11");
    list.add(k3);
    
    list.remove(new Klasse2("Name11"));
    

    Also, könnte ich so wie in der letzten Zeile, ein Objekt aus der Liste entfernen? Also wird, wenn ich ein neues Objekt einer Klasse so übergebe, und eben alles genau gleich initialisiere, genau das Objekt (in diesem Beispiel k3), gelöscht? Oder wird nur das nächst beste Objekt, der gleichen Klasse gelöscht? Also auch eine Frage is dann, wenn ich zwei Objekte komplett gleich initialisiere, optimiert der Compiler das so, dass die Referenzen auf das selbe Objekt zeigen?


  • Mod

    Der Code von "remove":
    [java]
    public boolean remove(Object o) {
    if (o==null) {
    for (Entry e = header.next; e != header; e = e.next) {
    if (e.element==null) {
    remove(e);
    return true;
    }
    }
    } else {
    for (Entry e = header.next; e != header; e = e.next) {
    if (o.equals(e.element)) {
    remove(e);
    return true;
    }
    }
    }
    return false;
    }[/code]
    Das Objekt wird also entfernt, wenn die equals-Methode true ergibt. Die mußt du in deiner Klasse halt entsprechend schreiben.

    Also auch eine Frage is dann, wenn ich zwei Objekte komplett gleich initialisiere, optimiert der Compiler das so, dass die Referenzen auf das selbe Objekt zeigen?

    Generell nicht. Strings sind da wohl ne Ausnahme, aber die kann man ja auch nicht verändern.


Anmelden zum Antworten