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.
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);
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);
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.
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;
}