Hallo,
bin gerade dabei, (mal wieder zu Übungszwecken), einen Sortierarlgorithmus (QuickSort mit IntertionSort) zu implementieren.
Dazu habe ich mir ein Interface geschrieben, über welches die einzelnen Objekte miteinander verglichen werden sollen (Listenelemente müssen das Interface (logischerweise^^) implementieren). (Comparable konnte ich nicht nehmen, da auch zweidimensinale Datenfelder sortiert werden sollen, daher ein eigenes Interface)
Leider schliesst ein solches Interface ja primitive Datentypen (Im Falle einer simplen, eindimensionalen Liste) aus (String, Integer und co sind ja final...). Einzigste Möglichkeit, diese nicht auszuschliessen, wäre ein eigener Comparator.
Welche Vor- bzw. Nachteile entstehen, wenn der Vergleich durch ein zusätzliches Objekt verwendet wird?
Die Teillisten bei Quicksort werden jeweils durch Threads sortiert, ist der Comparator in diesem Fall Thread-Safe?
Gibts vielleicht noch ne andere Möglichkeit, die mir entgangen ist?
bin gerade dabei, (mal wieder zu Übungszwecken), einen Sortierarlgorithmus (QuickSort mit IntertionSort) zu implementieren.
Dazu habe ich mir ein Interface geschrieben, über welches die einzelnen Objekte miteinander verglichen werden sollen (Listenelemente müssen das Interface (logischerweise^^) implementieren). (Comparable konnte ich nicht nehmen, da auch zweidimensinale Datenfelder sortiert werden sollen, daher ein eigenes Interface)
Code:
/**
* Interface, welcher Methoden zum Vergleich von zwei typgleichen Objekten
* definiert.
* Dieses Interface ist zum Verlgeich von Ein- als auch von Mehr-
* dimensionalen Listen geeignet.
* @author Aragorn
*/
public interface ISortable<T>
{
/**
* Vergleicht das übergebene Objekt und gibt, je nach dem ob:
* <ul>
* [*]die Objekte identisch sind, [b]0[/b] zurück
* [*]das eigene Objekte kleiner ist, [b]1[/b] zurück
* [*]das eigene Objekte größer ist, [b]-1[/b] zurück
* [/list]
* @param o Das zu vergleichende Objekt
* @param Index Die Spalte, anhand welcher der Vergleich erstellt wird
* @param CaseInSensitive Bei String Vergleichen die Groß- Kleinschreibung
* beachten?
* @return Das Vergleichsergebnis
*/
public int compareTo(
T o,
int Index,
boolean CaseInSensitive );
/**
* Liest den Wert der angegebenen Datenspalte
* @param Index Der Spalten Index
* @return Der gelesene Wert
*/
public T getColumnValue (
int Index );
/**
* Liefert im Falle eines Mehrdimensionalen Datenfeldes die Anzahl der
* Spalten zurück.
* @return Die Anzahl der Spalten
*/
public int getColumnCount ();
}
Leider schliesst ein solches Interface ja primitive Datentypen (Im Falle einer simplen, eindimensionalen Liste) aus (String, Integer und co sind ja final...). Einzigste Möglichkeit, diese nicht auszuschliessen, wäre ein eigener Comparator.
Welche Vor- bzw. Nachteile entstehen, wenn der Vergleich durch ein zusätzliches Objekt verwendet wird?
Die Teillisten bei Quicksort werden jeweils durch Threads sortiert, ist der Comparator in diesem Fall Thread-Safe?
Gibts vielleicht noch ne andere Möglichkeit, die mir entgangen ist?