Warum kann ich den Komparator nicht verwenden, um Primitive zu sortieren?
-
14-10-2019 - |
Frage
Wenn Java 5 Autoboxen hat, warum kann ich den Komparator nicht verwenden, um Primitive zu sortieren? Ein int
würde nicht in a eingewickelt werden Integer
?
Lösung
Arrays.sort(..)
haben dedizierte Überladungen für die Sortierung primitiver Arrays.
Wenn Sie neben den Standards spezielle Sortierregeln benötigen, müssten Sie das Autoboxen verwenden. Darüber hinaus müssten Sie Ihr Array in die Veränderung umwandeln Integer[]
, Weil int[]
ist nicht autoboxiert.
Und wenn Sie nicht über Arrays sprechen, sondern über Sammlungen - Sie haben keine Wahl - können Sammlungen nur Objekte enthalten.
Andere Tipps
Weil Sie a nicht parameterisieren können a Comparator<T>
- oder einen anderen parametrisierten Typ- mit einem primitiven Typ.
Ja, das ist massiv ärgerlich ... Sie können keine machen List<int>
oder ein Map<String, boolean>
usw. und Sie können nicht generische Methoden schreiben, die sowohl für Objekttypen als auch für Primitive funktionieren. Sie müssen dedizierte Methoden für jeden der 8 primitiven Typen haben. Aber das ist das Design, mit dem wir seit Java gebunden sind. 1. Schuld James Gosling ;-)
Wie Bozho betont, Arrays.sort(...)
Bietet alle Sortiermethoden, die Sie benötigen.