Lupuz.de: Artikel-Portal / Magazin

Zurück   Postpla.net - die Forum Community > PC, Internet und Technik > Coder's Area

[Java] Java Collection Framework, Frage zu TreeSets

Anzeigen:

Antwort
 
Themen-Optionen
lolomat
Alt 20.06.2008, 14:24   #1
Standard [Java] Java Collection Framework, Frage zu TreeSets

Hallo!

Ich habe eine Frage zu "TreeSet" in Java.

Bei der Erstellung eines TreeSets muss ein Comparatorobjekt übergeben werden:

Code:
import java.util.*;

public class Test
{
       public static void main(String[] args)
       {
              TreeSet set = new TreeSet(new CompObj());
       }

}
Die Klasse "CompObj" muss nun die Methode compare besitzten, die sie aus dem Interface "Comparator" erbt.

//Edith: Sie erbt eine abstrakte Methode, deshalb muss Sie überschrieben werden.

Code:
class CompObj implements Comparator
{
          public int compare(Object o1, Object o2)
          {
                    return(..."ein Vergleich"...);
          }
}
Meine Frage ist: Wie funktioniert das Comparatorobjekt genau? Ich denke, die Methode compare() wird aufgerufen, und vergleicht die beiden objekte. Welche Objekte sind das?
Bei versuchen ist mir aufgefallen, dass sie dich Sortierung im TreeSet nach dieser Methode richtet. Ich nehme an, dass irgendwelche objekte in der TreeSet der Methode übergeben werden, nur weiß ich nicht welche genau.

Zweite Frage:
Sowas ist doch sicher auch möglich:

Code:
import java.util.*;

public class Test implements Comparator
{ 
      TreeSet set;
      public static void main(String[] args)
      {
              Test test = new Test();
      }
      public Test()
      {
             set = new TreeSet(this);
      }
      public int compare(Object o1, Object o2)
      {
                return(...."Vergleich"....);
      }
}
oder?! :>

Dankeschön und noch nen schönen Tag.
 
 
Nach oben
Sidolin
Alt 20.06.2008, 14:59   #2
Standard

Eins: Galileo Computing :: Java ist auch eine Insel – 12.5 Mengen (Sets)
Zwei: Galileo Computing :: Java ist auch eine Insel – 12.4 Vergleichen von Objekten

Man muss keinen Comparator beim Treeset angeben, das ist optitional. Wenn du z.B. Zahlen da drin hast können die ja auch so verglichen werden. Wenn du eigene Klassen drin hast musst du eben einen Comparator mit passendem compare für deine Klassen angeben.

Ich nehme an, dass irgendwelche objekte in der TreeSet der Methode übergeben werden, nur weiß ich nicht welche genau.
Naja, die Objekte die du halt dann in das TreeSet steckst.

Zum zweiten: Ja, sollte gehen. Auf den ersten Blick wüsste ich nicht warum es nicht funktionieren sollte.
 
 
Nach oben
myUnderTakeR
Alt 20.06.2008, 15:21   #3
Standard

Hallo,

Zitat von lolomat Beitrag anzeigen
Bei der Erstellung eines TreeSets muss ein Comparatorobjekt übergeben werden
Du musst gar nichts ... ausser sterben
Laut Doku hast du 4 Überladungsmöglichkeiten:

publicTreeSet()
publicTreeSet(SortedSet m)
publicTreeSet(Comparator c)
publicTreeSet(Collection c)

1) Ist denk ich klar... erstellt dir ein leeres TreeSet ohne Einschränkungen.
2) Füllt das TreeSet mit den Einträgen aus dem SortedSet. ( Wenn man sich SortedSet anschaut sieht man, dass das ebenfalls einen Comparator implementiert.)
3) Erstellt dir nen leeres TreeSet aber nutzt den Comparator für Vergleiche und Suchanfragen.
4) Füllt dir das TreeSet mit den Einträgen aus der Collection, jedoch ohne Comparatoreinschränkung...

Zitat von lolomat Beitrag anzeigen
Meine Frage ist: Wie funktioniert das Comparatorobjekt genau? Ich denke, die Methode compare() wird aufgerufen, und vergleicht die beiden objekte. Welche Objekte sind das?
Bei versuchen ist mir aufgefallen, dass sie dich Sortierung im TreeSet nach dieser Methode richtet. Ich nehme an, dass irgendwelche objekte in der TreeSet der Methode übergeben werden, nur weiß ich nicht welche genau.
Wie du selbst schon sagst richtet sich die Sortierung nach dem Comparator... auch betroffen sind Suchanfragen o.ä.
Wenn du dir nun mal überlegst wie solche Anfragen realisiert werden wirst du schnell die Antwort deiner Frage finden

Alle Anfragen vergleichen immer wieder Objekte miteinander. Je nach Algorithmus mehr oder weniger... Genau diesen Vergleich übernimmt die compare() Methode und den kannst du durch überschreiben natürlich auch manipulieren.
.... aaaaaber ich denke mal das brauchst du nicht für deinen Anwendungsfall.

Zitat von lolomat Beitrag anzeigen
Zweite Frage:
Sowas ist doch sicher auch möglich:

Code:
import java.util.*;

public class Test implements Comparator
{ 
      TreeSet set;
      public static void main(String[] args)
      {
              Test test = new Test();
      }
      public Test()
      {
             set = new TreeSet(this);
      }
      public int compare(Object o1, Object o2)
      {
                return(...."Vergleich"....);
      }
}
oder?! :>
Also ich denk mal schon dass das funktionieren würde... jedoch würde ich zumindest die main(String[])-Methode in ne andere Klasse packen.

Hoffe ich konnte bisschen Licht ins Dunkle bringen

Gruß
 
 
Nach oben
Ähnliche Themen, die dich vielleicht interessieren
Thema Autor Forum Antworten Letzter Beitrag
Verschwörungs Theorien . Was geschah wirklich am 11 September ? Christian Philosophie und Gedanken 82 05.06.2006 02:58
Antworten aus "Der Schwächste fliegt" Grandylein Fun und Rätsel-Planet 10 21.07.2002 20:21
Anzeigen:
Antwort

Lesezeichen

Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 17:07 Uhr.


Lupuz.de - wir können auch anders!
©1998 - 2008, Lupuz:Information-Network
Powered by vBulletin Version 3.7.1 (Deutsch), Jelsoft Enterprises Ltd.
Grüne Links?

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.