TreeSet neues TreeSet aufbauen

Status
Nicht offen für weitere Antworten.

johannes_

Mitglied
Hallo,

hat jemand eventuell eine Idee wie ich folgendes machen kann?

Ich will mit einer while-Schleife über ein TreeSet gehen, innerhalb der while-Schleife passe ich einen timestamp an, der vorher der Sortierung diente. Nun will ich jedesmal das TreeSet neu sortiert haben bis sich der timestamp nicht mehr ändert.

Also in Pseudocode so:

Code:
timestampChanged = true;

do {
  sortiere treeSet neu;
  while (iterate over treeset) {
    if (irgendwas) {
      timestampChanged = false;
    } else {
      timestampChanged = true;
    }
  }
} while (timestampChanged);

Leider kann man ja ein TreeSet nicht neu sortieren und jedesmal ein neues Objekt aus dem alten zu erzeugen geht ja auch nicht (weil ja das Objekt über das ich iteriere sich nicht ändern kann) oder ich habe gerade eine Hirnblockade ;-)

Viele Grüße,
Johannes
 
S

SlaterB

Gast
> und jedesmal ein neues Objekt aus dem alten zu erzeugen geht ja auch nicht (weil ja das Objekt über das ich iteriere sich nicht ändern kann)

dieser Satz macht keinen Sinn, was spricht gegen
TreeSet newSet = new TreeSet(oldSet);
oder ähnliches? dabei wird das alte Set nicht verändert, so dass es sich mit der Iteration nicht stören sollte,
außerdem willst du das gewiss höchstens einmal am Anfang oder Ende machen, nicht während der Iteration

eine andere Möglichkeit als ein neues TreeSet sehe ich nicht, das heißt aber nicht, dass es keine gibt,

etwas aufwendiger wäre, alle Elemente in eine Liste zu exportieren, das Original-TreeSet zu leeren und neu zu befüllen,
falls du kein neues TreeSet-Objekt haben sondern das alte korrigieren willst

sparsamer ist vielleicht, nur die sich geänderten Elemente zu entfernen und neu einzufügen,
also erst per Iteration diese Elemente finden und in einer separaten Liste speichern,
dann später jeweils entfernen + neu einfügen
 
Zuletzt bearbeitet von einem Moderator:

johannes_

Mitglied
muss ich das nicht von sich selbst aufrufen, also:

Code:
    TreeSet<Page> sorted = sort.visitDocument(session);

    ...
    
    do {
      sorted = new TreeSet<Page>(sorted);
      Iterator<Page> pages = sorted.iterator();

      // Iterate over every page.
      while (pages.hasNext() && !skipPages) {
      ...
      }
    } while (timestampChanged);

also bei pages ändere ich dann den timestamp (und nach dem wird initial sortiert und soll dann jedesmal wieder sortiert werden, bis keine Änderung des timestamps mehr erfolgt).

Irgendwo habe ich jetzt eine Endlosschleife drin, ich weis nicht ob das schon an dem liegt oder daran, dass ich den timestamp falsch ändere... muss ich mal debuggen.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
BRAUCHST du nach jeder Änderung die neu sortierte TreeSet? (Und muss die immer ALLE Elemente mit der neuen Sortierung enthalten?)

In Anlehnung an deinen Pseudocode könnte ich jetz vorschlagen, dass du es so machen könntest:
Code:
while (...)
{
    doIt();
}

Etwas mehrsagender wäre vielleicht
Code:
TreeSet previous = der anfängliche TreeSet
TreeSet current = new TreeSet();
boolean changed = true;
while (changed)
{
    changed = false;
    for (Key key : previous.keySet())
    {
        Value value = previous.get(key);
        if (keyHasToBeChanged)
        {
            key.change();
            changed = true;
        }
        current.put(key, value);
    }
    previous = current;
    current = new TreeSet();
}
// Neuer TreeSet ist jetzt 'previous'
Allerdings wäre das ziemlich ineffizient. Besser wäre (was SlaterB glaubich schon angedeutet hatte): Die Keys UND VALUES in Listen packen, dann ALLE Keys zu ändern, und die geänderten Keys mit den neuen Values ALLE AUF EINMAL in den neuen Set einzufügen....
 

johannes_

Mitglied
Naja, ich will wirklich nach jeder iteration über das TreeSet eines haben, das wieder sortiert ist, nachdem ich den timestamp von manchen Objekten angepasst habe. Das alte brauche ich dann eigentlich nicht mehr zwischengespeichert, also müsste es ein "sorted = new TreeSet<Page>(sorted);" direkt bevor über das TreeSet iteriert wird tun?
 

Marco13

Top Contributor
Hoppala :oops: naja, Set, Map - so kurz nach dem Aufstehen (und bevor der erste Kaffee zu wirken beginnt) sei mir das mal verziehen :oops:
 

johannes_

Mitglied
Hm also irgendwie klappt das nicht mit dem sorted = new TreeSort(sorted); irgendwie scheint das dann nicht richtig sortiert zu sein bzw. ist die dann völlig durcheinander, aber den timestamp setzt er richtig neu...

nach dem was ihr geschrieben habt würde das TreeSet ja nur ganz am Ende dann nocheinmal sortiert aber ich will nach jedem while (timestampChanged) ein neues sortiertes TreeSet aus dem alten TreeSet haben.
 

Ark

Top Contributor
Möglicherweise steckt da ein Designfehler drin. Mir kommt jedenfalls kein Grund in den Sinn, warum man ein halbfertiges Set benötigen sollte.

Erkläre uns doch mal, wozu das Ganze gut sein soll bzw. was du erreichen willst. :)

Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
T Collections TreeSet.contains ruft nicht .equals? Allgemeine Java-Themen 4
B TreeSet-Ausgeben Allgemeine Java-Themen 8
B Collections TreeSet/TreeMap, doppelte Einträge zulassen ? Allgemeine Java-Themen 11
K Collections TreeSet beinhaltet Objektleichen Allgemeine Java-Themen 26
S TreeSet - Comparator ändern -> resort? Allgemeine Java-Themen 8
M Vergleich von TreeSet<HashSet>^2 Allgemeine Java-Themen 8
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
A Effizienzfrage bei TreeSet / XML-Verarbeitung Allgemeine Java-Themen 8
C TreeSet mit Objekten befüllen Allgemeine Java-Themen 12
J TreeSet und Comparator will nicht so wie ich Allgemeine Java-Themen 2
J unsortiertes Treeset Allgemeine Java-Themen 2
S Verhalten der Klasse TreeSet... Allgemeine Java-Themen 4
S TreeSet benötigt zu viel Speicher Allgemeine Java-Themen 5
André Uhres BigDecimal in HashSet eingefügt, aber nicht in TreeSet Allgemeine Java-Themen 2
M TreeSet exception bei add Allgemeine Java-Themen 17
E Statt HashSet die TreeSet verwenden Allgemeine Java-Themen 4
G TreeSet ändert sich bei Änderungen nicht! Allgemeine Java-Themen 15
M Fehler in TreeSet.remove() Allgemeine Java-Themen 6
B String Array aus TreeSet Allgemeine Java-Themen 6
T TreeSet neu sortieren Allgemeine Java-Themen 4
I "Neues" Lizenzmodell Oracle - JRE nicht mehr zur Redistribution freigegeben? Allgemeine Java-Themen 16
Ullenboom Ein neues Java-Buch entsteht, willst du helfen? Allgemeine Java-Themen 7
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
S Neues Objekt darstellen Allgemeine Java-Themen 4
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
J Erkennen, ob Programm in JAR (neues Problem) Allgemeine Java-Themen 7
A String Array Werte in neues String Array übernehmen Allgemeine Java-Themen 5
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
X Neues Spiel/ Neustart Allgemeine Java-Themen 5
A irgendwas neues für MP3 ? Allgemeine Java-Themen 2
F Log Appender für neues Logfile Allgemeine Java-Themen 3
E Neues Projekt - Welche GUI / IDE /Techniken / etc. Allgemeine Java-Themen 14
L Methode "Neues Spiel" für Memory Allgemeine Java-Themen 2
L Java6 update N bekommt neues Browser-Plugin, bitte testen. Allgemeine Java-Themen 7
V Neues Objekt anlegen, welcher Typ? Allgemeine Java-Themen 2
M Neues JPanel in JFrame einbinden Allgemeine Java-Themen 6
F neues fenster Allgemeine Java-Themen 3
M -->: Seite war mit Virus infiziert, daher neues Thema . Allgemeine Java-Themen 3
S In der For-schleife jeweils ein neues Array erstellen Allgemeine Java-Themen 8
T HashMap#get neues Objekt, selber Inhalt Allgemeine Java-Themen 12
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
L-ectron-X Neues in J2SE 1.5 Allgemeine Java-Themen 6
T Per Reflection neues Objekt erzeugen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben