4 Stimmen

Java : Wie sortiert man ein Array von Floats in umgekehrter Reihenfolge?

Ich verwende die folgenden Zeilen, um ein Array von Floats in umgekehrter Reihenfolge zu sortieren, aber ich bekam eine Fehlermeldung, was ist falsch?

float sortedData[]=new float[100];
  ...
Arrays.sort(sortedData,Collections.reverseOrder());

Fehler: Symbol kann nicht gefunden werden

Symbol : Methode sort(float[],java.util.Comparator) Standort: Klasse java.util.Arrays Arrays.sort(sortierteDaten,Collections.reverseOrder());

\=========================================================================

Ich war verwirrt, weil in Jdk1.6 api, ich sah dies: [ Arrays ] public static void sort( Schwimmer [] a), heißt es nicht: public static void sort( Schwimmer [] a)

3voto

crunchdog Punkte 12308

Diese besondere Methode nimmt ein Array vom Typ Object. Der Typ float erweitert nicht die Klasse Object, sondern Schwimmer tut.

Float sortedData[]=new Float[100];
...
Arrays.sort(sortedData,Collections.reverseOrder());

3voto

Tom Hawtin - tackline Punkte 142461

Ich schlage vor, eine Arrays.sort(float[]) und dann eine Methode schreiben reverse(float[]) (Sie können die NaNs verschieben oder nicht).

2voto

dfa Punkte 110809

Es gibt keine Arrays.sort(float[], Comparator) Methode; Sie können jedoch oder Arrays.asList() oder verwenden Sie einfach ein gepacktes Float[]-Array:

Float[] sortedData = new Float[100];
...
Arrays.sort(sortedData, Collections.reverseOrder());

Um ein primitives Array zu boxen, können Sie den folgenden Code verwenden:

public static Float[] floatArray(float... components) {
    return toBoxedArray(Float.class, components);
}

private static <T> T[] toBoxedArray(Class<T> boxClass, Object components) {
    final int length = Array.getLength(components);
    Object res = Array.newInstance(boxClass, length);

    for (int i = 0; i < length; i++) {
        Array.set(res, i, Array.get(components, i));
    }

    return (T[]) res;
}

oder etwas einfügen wie commons lang in Ihrem Projekt und verwenden Sie ArrayUtils

1voto

Paul Tomblin Punkte 172816

Der Compiler belügt Sie nicht. Es gibt in Arrays keine Methode namens "sort", die ein Array von Floats und einen Comparator benötigt. Es gibt jedoch eine Methode namens "sort", die ein Array von Objects und einen Comparator benötigt. Vielleicht sollten Sie Ihr Array in ein Array von Float konvertieren, bevor Sie sort aufrufen?

Betrachten Sie es als einen Defekt in Javas Autoboxing, wenn Sie so wollen, dass es nicht in der Lage ist, ein Array von Primitiven in ein Array von äquivalenten Objekten zu autoboxen.

1voto

Sean Patrick Floyd Punkte 283617

Guave hat eine Methode Floats.asList() für die Erstellung einer List<Float> unterstützt von einer float[] Array. Sie können dies mit Collections.sort verwenden, um den Comparator auf das zugrunde liegende Array anzuwenden.

List<Float> floatList = Floats.asList(arr);
Collections.sort(floatList, Collections.reverseOrder());

Beachten Sie, dass es sich bei der Liste um eine Live-Ansicht handelt, die durch das eigentliche Array unterstützt wird, so dass sie ziemlich effizient sein sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X