Java >> Tutoriel Java >  >> Java

Tri parallèle de tableau Java 8

Le tri est un processus d'organisation des éléments dans un ordre croissant (ordre naturel) ou décroissant. Pour trier les éléments d'un tableau, Java fournit des méthodes disponibles dans java.util.Arrays classe.

Pour trier les éléments d'un tableau, Java utilise deux approches séquentielle et concurrente. Java 7 et les versions antérieures utilisaient une approche séquentielle pour trier les éléments du tableau. Le tri séquentiel utilise un seul thread pour trier le tableau et offre les mêmes performances dans les systèmes monoprocesseurs et multiprocesseurs.

Dans Java 8, Tri de tableaux parallèles la fonctionnalité est ajoutée à la classe Arrays qui était basée sur une approche concurrente. Il utilise un  algorithme de tri tri-fusion parallèle pour trier les éléments. Il divise le tableau en sous-tableaux, les trie, puis les fusionne. Il fournit le même ensemble d'opérations de tri fourni par la classe Arrays, mais avec une implémentation parallèle qui utilise le framework Fork/Join.

Les nouvelles méthodes ajoutées sont appelées parallelSort() et sont surchargés pour tous les types de données primitifs et les objets comparables.

Avantage du tri parallèle Java 8

  • Le tri parallèle de grands tableaux sur des systèmes multiprocesseurs est plus rapide que le tri séquentiel de tableaux.

  • ParallelSort() utilise plusieurs threads pour trier les données.

Exemple :Comment trier un tableau en parallèle

Dans cet exemple, nous trions un tableau d'entiers à l'aide de la méthode parallelSort() de la classe Arrays. Vous devez importer les java.util.Arrays classe avant d'utiliser ses méthodes.

import java.util.Arrays;

class Demo{
	public static void main(String[] args) {
		int[] arr = {25,3,6,21,4,4,7,5};
		System.out.println("Array...");
        for(int i:arr) {
        	System.out.print(i +" ");
        }
        System.out.println("\nAfter Sorting...");
        // Parallel array sorting 
        Arrays.parallelSort(arr);
        for(int i:arr) {
        	System.out.print(i +" ");
        }
	}
}

Sortie :

Tableau...
25 3 6 21 4 4 7 5 
Après le tri...
3 4 4 5 6 7 21 25 

Méthodes parallelSort() de classe Java 8 Arrays

Ce tableau contient les méthodes de la classe Arrays. Ce sont des méthodes surchargées de la méthode parallerSort(), nous pouvons les utiliser selon le type de tableau.

Description

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Il trie le tableau spécifié dans l'ordre numérique croissant.

Il trie la plage spécifiée du tableau dans l'ordre numérique croissant.

Méthode

public static void parallelSort(byte[] a)

public static void parallelSort(byte[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(char[] a)

public static void parallelSort(char[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(short[] a)

public static void parallelSort(short[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(int[] a)

public static void parallelSort(int[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(long[] a)

public static void parallelSort(long[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(float[] a)

public static void parallelSort(float[] a,
                              int fromIndex,
                               int toIndex)

public static void parallelSort(double[] a)

public static void parallelSort(double[] a,
                              int fromIndex,
                               int toIndex)

Exemple :Comment trier un sous-tableau ou un tableau partiel

Nous pouvons trier un tableau partiel en spécifiant l'index de début et de fin à la méthode parallelSort(). C'est utile lorsque nous voulons trier une partie du tableau et non le tableau entier.

import java.util.Arrays;

class Demo{
	public static void main(String[] args) {
		int[] arr = {25,3,6,21,4,4,7,5};
		System.out.println("Array...");
        for(int i:arr) {
        	System.out.print(i +" ");
        }
        System.out.println("\nAfter Sorting...");
        // Parallel sub-array sorting 
        Arrays.parallelSort(arr,0,4); // Passing start and end index
        for(int i:arr) {
        	System.out.print(i +" ");
        }
	}
}

Sortie :

Tableau...
25 3 6 21 4 4 7 5 
Après le tri...
3 6 21 25 4 4 7 5 

Exemple :IllegalArgumentException pendant le tri

La méthode parallelSort() lève une exception si l'index de début est supérieur à l'index de fin. Voir l'exemple ci-dessous.

import java.util.Arrays;

class Demo{
	public static void main(String[] args) {
		int[] arr = {25,3,6,21,4,4,7,5};
		System.out.println("Array...");
        for(int i:arr) {
        	System.out.print(i +" ");
        }
        System.out.println("\nAfter Sorting...");
        // Parallel sub-array sorting 
        Arrays.parallelSort(arr,4,0); // Error: startindex > endindex
        for(int i:arr) {
        	System.out.print(i +" ");
        }
	}
}

Sortie :

Array...
25 3 6 21 4 4 7 5 
Après le tri...
Exception dans le thread "main" java.lang.IllegalArgumentException :fromIndex(4)> toIndex(0)

Exemple : Tableau de caractères

Étant donné que la classe Arrays fournit diverses méthodes de surcharge pour prendre en charge tous les types de tableau possibles, nous pouvons également trier un tableau d'éléments char. Voir l'exemple ci-dessous.

import java.util.Arrays;

class Demo{
	public static void main(String[] args) {
		char[] arr = {'s','w','a','f','z','b'};
		System.out.println("Array...");
        for(char i:arr) {
        	System.out.print(i +" ");
        }
        System.out.println("\nAfter Sorting...");
        // Parallel array sorting 
        Arrays.parallelSort(arr);
        for(char i:arr) {
        	System.out.print(i +" ");
        }
	}
}

Sortie :

Tableau...
s w a f z b 
Après le tri...
a b f s w z 

Exemple :tri d'un tableau non parallèle

Si nous ne voulons pas utiliser le tri parallèle, dans ce cas, nous pouvons utiliser la méthode sort() de la classe Arrays qui utilise un seul thread pour trier le tableau. Voir l'exemple ci-dessous

import java.util.Arrays;

class Demo{
	public static void main(String[] args) {
		int[] arr = {25,3,6,21,4,4,7,5};
		System.out.println("Array...");
        for(int i:arr) {
        	System.out.print(i +" ");
        }
        System.out.println("\nAfter Sorting...");
        // Non parallel array sorting 
        Arrays.sort(arr);
        for(int i:arr) {
        	System.out.print(i +" ");
        }
	}
}

Sortie :

Tableau...
25 3 6 21 4 4 7 5 
Après le tri...
3 4 4 5 6 7 21 25 

Conclusion

Eh bien, dans cette rubrique, nous avons appris à trier les éléments d'un tableau à l'aide des méthodes de classe Arrays. Nous avons utilisé la méthode parallelSort() pour le tri parallèle et sort() pour le tri non parallèle.

Si nous avons manqué quelque chose, vous pouvez nous suggérer à - info.javaexercise.com


Balise Java