Iterator für eine geordnete Menge

Bitte aktiviere JavaScript!
Mit size spart man sich natürlich eine Laufzeit von n zu 1...
Aber hier ging/geht es doch auch darum, dass TE etwas dabei "lernt/mitnimmt".
Und da finde ich unterschiedliche Möglichkeiten nicht schlecht zum lernen...

Genauso wie mit den Tests... meine sind nicht wirklich gut. Aber hab halt noch nicht so viele Erfahrungen damit.
 
BTW es ist nicht ganz richtig, den Begriff "Set" mit Menge zu übersetzen, denn unter einer Menge versteht man etwas anderes, denn eine Menge erlaubt z.B auch doppelte Elemente - "Sets" hingegen nicht. Es gibt dafür keine "adäquate" Übersetzung...
 
BTW es ist nicht ganz richtig, den Begriff "Set" mit Menge zu übersetzen, denn unter einer Menge versteht man etwas anderes, denn eine Menge erlaubt z.B auch doppelte Elemente - "Sets" hingegen nicht. Es gibt dafür keine "adäquate" Übersetzung...
Hier wird natürlich nicht der mathematische Begriff der Menge verwendet sondern wenn wir von Datenstrukturen reden, dann wird natürlich auch die entsprechende Definition benutzt.

Siehe:
https://de.wikipedia.org/wiki/Menge_(Datenstruktur)
https://de.wikipedia.org/wiki/Menge_(Mathematik)
 
BTW es ist nicht ganz richtig, den Begriff "Set" mit Menge zu übersetzen, denn unter einer Menge versteht man etwas anderes, denn eine Menge erlaubt z.B auch doppelte Elemente - "Sets" hingegen nicht. Es gibt dafür keine "adäquate" Übersetzung...
Du kannst auch ein Set schreiben, welches intern doppelte Elemente enthält. Das muss sich nur identisch zu dem verhalten, welches keine doppelten enthält....
 
:D wow da habe ich ja eine Aufgabe gepostet :D

:) Freut mich so viel Feedback :)

Eine Frage hätte ich aber noch.

Code:
            public void remove() {
                a.pred.pred.succ = a;
                a.pred = a.pred.pred;
            }
Das ganze habe ich verstanden. Doch wie soll man das machen wenn man nach einem Object o gefragt wird das dieses Element entfernt werden soll?
Also
public void remove(Object o)
Könnte mir dabei noch jemand auf die Sprünge Helfen vielleicht?
"Ich dachte mit einem Vergleich auf das Überquerte Object und dann könnte man ja den remove von oben nutzen? macht sowas Sinn?"

Liebe Grüße
 
Die Methode ist in beiden Varianten vorhanden ;)

In meinem Code nur im AbstractSet, wovon ich erbe, in @Tobias-nrw aber direkt implementiert. (wobei ich grad merke, dass das bei mir noch falsch ist...)


Aber ja - deine Idee passt. Mit dem Iterator den Wert suchen und dann damit löschen.
 
@ocsme stimmt, das war jetzt eine Menge. ;)

Du musst dir das bildlich vorstellen. a1, a2 und a3. a2 soll gelöscht werden. rot = zu löschen, grün = hinzuzufügen, a1 und a3 können natürlich noch weitere Kanten haben:

gra1.png
 
Wir sind aber vermutlich völlig übers Ziel der Aufgabe hinausgeschossen...


Set inklusive der SubSet-methoden ist zumindest nicht wirklich das, was ich im ersten/zweiten Semester Java erwarten würde.
 
Das remove(Object o) finde ich bei euren Daten jetzt nicht auf anhieb.
Dachte mir so etwas wenn wir ja nun die ganzen Methoden im Iterator hätten :)

Java:
         public boolean remove(Object x) {
             while(hasNext()) {
                 Object next = next();
                 if(x.equals(next)) {
                     this.next();
                     this.remove();
                     return true;
                 }
             }
            
             return false;
         }
bei dem this.next() und this.remove() bin ich mir nicht sicher :?
 
Dachte mir so etwas wenn wir ja nun die ganzen Methoden im Iterator hätten
Die remove(o)-Methode ist aber keine Methode, die vom Iterator-Interface spezifiziert wird.

Unabhängig davon sähe die remove(o)-Methode im Set fast identisch zu Deiner aus, wenn man mittels Iterator arbeiten will:
Java:
Iterator<T> it = iterator();
while (it.hasNext()) {
    T next = it.next();
    if (next.equals(o)) {
        it.remove();
        return true;
    }
}
return false;
 
@ocsme Ich hatte das an den Iterator delegiert, es geht natürlich auch ohne.... Zum Bleistift:
Java:
	@Override
	public boolean remove(Object o) {
		if (isEmpty())
			return false;
		Cell a = anchor;
		do {
			if (Objects.equals(a.value, o)) {
				a.pred.pred.succ = a;
				a.pred = a.pred.pred;
				return true;
			}
			a = a.succ;
		} while (a != anchor);
		return false;
//		Iterator<T> i = iterator();
//		while (i.hasNext())
//			if (i.next().equals(o)) {
//				i.remove();
//				return true;
//			}
//		return false;
	}
 
Wo steht das :D

Es gibt doch die Übereinkunft, dass a.equals(b) = true, gdw a.compareTo(b) = 0.
Im Javadoc:

Note that the ordering maintained by a sorted set (whether or not an explicit comparator is provided) must be consistent with equals if the sorted set is to correctly implement the Set interface. (See the Comparable interface or Comparator interface for a precise definition of consistent with equals.) This is so because the Set interface is defined in terms of the equals operation, but a sorted set performs all element comparisons using its compareTo (or compare) method, so two elements that are deemed equal by this method are, from the standpoint of the sorted set, equal. The behavior of a sorted set is well-defined even if its ordering is inconsistent with equals; it just fails to obey the general contract of the Set interface.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben