Des méthodes pour des Comparable(s)                        

Des méthodes pour des Comparable(s)

           

Nous appelerons Comparable tout objet d'une classe qui implémente l'interface Comparable. Si un objet est Comparable, cela signifie que dans sa classe la méthode compareTo a été implémentée, et donc que cet objet dispose de la méthode compareTo.

On décide maintenant de définir des méthodes qui puissent s'appliquer à des Comparable(s).
On définit une première méthode, la méthode plusGrand, qui reçoit deux Comparable(s) et retourne le plus grand des deux.
On définit ensuite une méthode nommée trier servant à trier un tableau de Comparable(s)
On définit enfin une méthode nommée aussi trier servant à trier un Arraylist de Comparable(s).

Les méthodes trier utilisent ici un tri par insertion.

package utilitaires;

import java.util.ArrayList;

public class Ordre { 
    public static Comparable plusGrand(Comparable c1,Comparable c2) {
	if (c1.comparerA(c2) == 1) return c1;
	else return c2;
    }
    
   public static void trier(Comparable[] tableau) {
      int i, j;
      Comparable cle;
	
      for (i = 1; i < tableau.length; i++) {
         cle = tableau[i];
	 j = i;
	 while((j >= 1) && (cle.comparerA(tableau[j - 1]) == -1)) {
	    tableau[j] = tableau[j - 1];
	    j = j - 1;
	 }
	 tableau[j] = cle;
      }
   }

   public static <T extends Comparable> void trier(ArrayList<T> liste) {
	int i, j;
	T cle;
	
	for (i = 1; i < liste.size(); i++) {
	    cle = liste.get(i);
	    j = i;
	    while((j >= 1) && (cle.comparerA(liste.get(j - 1)) == -1)) {
		liste.set(j, liste.get(j - 1));
		j = j - 1;
	    }
	    liste.set(j, cle);
	};
    }
}

Le fichier Ordre.java


Comparable c1 : on remarque qu'on peut déclarer des variables de type Comparable, c'est-à-dire d'un type d'une interface ; cette variable pourra référencer tout objet d'une classe qui implémente l'interface Comparable.
Comparable[] tableau : on remarque qu'on peut déclarer des tableaux de Comparable(s) ; un tel tableau peut contenir tout Comparable (tout objet d'une classe qui implémente l'interface Comparable), même si les objets contenus n'appartient pas tous à la même classe.
public static <T extends Comparable> void trier(ArrayList<T> liste) : cet en-tête est plus compliquée mais il faut procéder ainsi en ce qui concerne un ArrayList de Comparable(s) contrairement à ce qu'on a fait pour les tableaux de Comparable(s). En effet, si une classe, Compte par exemple, implémente l'interface Comparable, alors un tableau de Compte(s) sera considéré comme étant aussi un tableau de Comparable ; en revanche, un ArrayList de Compte ne sera pas considéré comme étant un ArrayList de Comparable(s). C'est pourquoi l'en-tête de la méthodetrier doit suivre notre exemple pour pouvoir utiliser cette méthode pour un ArrayList déclaré comme contenant des objets d'une classe qui implémente l'interface Comparable.

© Irène Charon Télécom ParisTech 2010