2016-07-13 19 views
0

Wenn ich eine ArrayList von benutzerdefinierten Objekten habe, die ich in der Lage sein muss, sie in verschiedenen Sortierungen anzuzeigen (z. B. 4 Sortierarten, so 4 Komparatoren, um die richtigen Elementvariablen der zu verwenden Objekte für die Sortierung) Was ist der effizienteste Weg?
Ich glaube nicht, z. 4 Array-Listen der Objekte sortiert nach einem bestimmten Komparator ist optimal.
Gibt es einen anderen effizienteren Weg?
Bitte beachten Sie, dass ich diese Objekte zur gleichen Zeit sortiert haben müsste, wie sie auf der gleichen Seite dargestellt werden. So kann ich nicht auf Anfrage sortierenArraylist auf X verschiedene Arten gleichzeitig sortieren

+2

Wo zeigen Sie diese an? Sollte die Ansicht nicht die Sortierung übernehmen (wie beim Klicken auf eine Kopfzeile in einem Datenraster)? – Philippe

+0

können Sie 4 verschiedene 'Comparator' implementieren, aber AFAIK können Sie nicht die gleiche' List' in verschiedenen Wais ... –

+0

@Philippe: In einer UI in Android-Gerät haben. Nun, die Ansicht kann die Sortierung übernehmen, aber ich wollte 4 verschiedene sortierte Listen der gleichen Objekte vermeiden, wenn möglich – Jim

Antwort

0

Sie könnten verschiedene Indexarrays haben, die ganze Zahlen enthalten, die als Indizes Ihrer ursprünglichen ArrayList interpeded sind. Diese können auf verschiedene Arten sortiert werden.

Um die Listenelemente zuzugreifen, verwenden Sie so etwas wie diese:

list.get(index1.get(i)); 
+0

Das bedeutet, ich hätte 4 sortierte Listen von Ganzzahlen, die die Indizes der Array-Liste darstellen. Wenn man bedenkt, dass die Arraylist Referenzen der Objekte speichert und wir im Wesentlichen während der Sortierung die Referenzen bewegen, gibt es einen großen Unterschied zwischen den Ansätzen? – Jim

+0

@Jim: Ja, du hast Recht. In Java gibt es keinen signifikanten Unterschied. Ich bezweifle jedoch, dass es einen wesentlich effizienteren Weg gibt, Ihre Anforderungen zu erfüllen. –

0

Ich denke, dass FlyWeight design pattern Ihre Erwartungen entsprechen könnte.

Das Flyweight-Muster wird hauptsächlich verwendet, um die Anzahl der erstellten Objekte zu reduzieren und den Speicherbedarf zu reduzieren und die Leistung zu erhöhen. Diese Art von Entwurfsmuster kommt unter strukturelles Muster, da dieses Muster Möglichkeiten zur Verringerung der Objektanzahl bietet, wodurch die Objektstruktur der Anwendung verbessert wird.

Da Sie Ihre Objekte in einer ArrayList haben, können Sie so viele ArrayLists wie verschiedene Arten von Arten erstellen, die Sie zum Speichern von Fliegengewicht-Objekten benötigen (im Grunde ID, Reihenfolge).

Verwandte Themen