web-dev-qa-db-fra.com

Tri du tableau int dans l'ordre décroissant

Duplicata possible:
Trier les tableaux de types primitifs par ordre décroissant
Java: Comment trier un tableau de flottants dans l'ordre inverse?
Comment inverser un tableau int en Java?

Le code suivant triera le tableau dans l'ordre croissant:

int a[] = {30,7,9,20};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

J'ai besoin de le trier dans l'ordre décroissant. Comment utiliser Comparator pour ce faire?

Veuillez aider.

29
android

Pour les types de tableaux primitifs, vous devez écrire un algorithme de tri inverse:

Alternativement, vous pouvez convertir votre int[] En Integer[] Et écrire un comparateur:

public class IntegerComparator implements Comparator<Integer> {

    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
}

ou utilisez Collections.reverseOrder() car il ne fonctionne que sur les types de tableaux non primitifs.

et enfin,

Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1);
Arrays.sort(a2, new IntegerComparator()); // OR
// Arrays.sort(a2, Collections.reverseOrder());

//Unbox the array to primitive type
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2);
17
Buhake Sindi
    Comparator<Integer> comparator = new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    };

    // option 1
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
    Arrays.sort(array, comparator);

    // option 2
    int[] array2 = new int[] { 1, 24, 4, 4, 345 };
    List<Integer>list = Ints.asList(array2);
    Collections.sort(list, comparator);
    array2 = Ints.toArray(list);
6
John B

Guava a une méthode Ints.asList() pour créer un List<Integer> soutenu par un int[] tableau. Vous pouvez l'utiliser avec Collections.sort pour appliquer le comparateur au tableau sous-jacent.

List<Integer> integersList = Ints.asList(arr);
Collections.sort(integersList, Collections.reverseOrder());

Notez que ce dernier est une liste en direct soutenue par le tableau réel, donc il devrait être assez efficace.

5
Sean Patrick Floyd

Si ce n'est pas un tableau grand/long, mettez-le en miroir:

for( int i = 0; i < arr.length/2; ++i ) 
{ 
  temp = arr[i]; 
  arr[i] = arr[arr.length - i - 1]; 
  arr[arr.length - i - 1] = temp; 
}
5
Matjaz Muhic