Tri d un vector en java

fredo -  
 reponse -
Bonjour,

J 'un un vector avec plusieurs élements et je souhaiterais effectuer un tri croissant sur le 3 element il s 'agit d une chaine de caracteres .
Je sais qu 'il existe une fonction genre : collection.sort ... mais je n 'arrive pas à l 'utiliser .

Voici mon code :
// je declare mon vector
public Vector v_tableau = new vector();
// j 'appelle une methode pour alimenter mon vector qui est de type vector
v_tableau = GetListeCP()
// et puis c 'est maintenant que je souhaite faire un tri du vector sur le 3 element mais je n y arrive pas
//c un truc comme ça :
collection.sort
.....

Savez vous comment doit on proceder
Merci de vos réponses
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. pb.barthe Messages postés 9 Statut Membre 9
     
    Salut,

    Bon, je t'ai fait un petit programme tuto :
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.Vector;
    
    public class SortableVectorOfString extends Vector implements Comparator{
    
    	/*
    	 * Numéro du caractère sur lequel on va trier
    	 * (Attention, les indices commencent à 0)
    	 */
    	int numChar = 0;
    	
    	/*
    	 * fonction de tri
    	 */
    	private void sortStringVector(int numChar){
    		/*
    		 * On précise le numéro du caractère à partir duquel doit se faire
    		 * le tri
    		 */ 
    		this.numChar = numChar;
    		/*
    		 * Le 1er paramètre est le Vecteur à trier (moi-même)
    		 * Le 2ème paramètre est le Comparator à utiliser pour cela...
    		 * ... et c'est encore moi-même car j'implémente Comparator (ce
    		 * qui m'oblige à remplir le contrat de Comparator qui stipule 
    		 * que je dois fournir une méthode 'compare') 
    		 */
    		Collections.sort(this, this);
    	}
    
    	/* 
    	 * Fonction de comparaison
    	 * @param arg0 1er String à comparer
    	 * @param arg1 2ème String à comparer
    	 * @see java.util.Comparator#compare()
    	 */
    	public int compare(Object arg0, Object arg1) {
    		String s0 = (String)arg0;
    		String s1 = (String)arg1;
    		/*
    		 * Le plus pénible est de prendre en compte les cas où une des chaînes
    		 * n'a pas la longueur minimum requise pour le tri à partir du n-ième
    		 * caractère...
    		 */
    		if (s0.length() <= numChar) {
    			// Si le 1er String n'a pas la longueur minimum requise
    			if (s1.length() <= numChar) {
    				// ... ni le 2ème : on dit qu'elles sont égales
    				return 0;
    			} else {
    				// ... si le 2ème est à la maille : 
    				//     on dit que le 1er est plus petite
    				return -1;
    			}
    		} else {
    			// Si le 1er String est assez grand
    			if (s1.length() <= numChar) {
    				// ... mais pas le 2ème : on dit que le 1er est plus grand
    				return 1;
    			} else {
    				// Mais une fois ces cas traités, String fournit ce qu'il faut
    				return s0.substring(numChar).compareTo(s1.substring(numChar));
    			}
    		}
    	}
    
    	/*
    	 * Simple méthode d'affichage pour le test
    	 */
    	public void display(){
    		System.out.println("===============================");
    		System.out.println("Tri sur le car. " + numChar + ":");
    		for (Iterator iterator = iterator(); iterator.hasNext();) {
    			System.out.println(iterator.next());
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		// On crée l'objet
    		SortableVectorOfString svs = new SortableVectorOfString();
    		// On l'alimente un peu
    		svs.add("QsDfghjklm");
    		svs.add("AzErtyu");
    		svs.add("WxCvbn");
    		// 1er tri sur les chaînes complètes
    		svs.sortStringVector(0);
    		svs.display();
    		// 2ème tri ne distingue pas "AzErtyu" de "WxCvbn"
    		svs.sortStringVector(8);
    		svs.display();
    		// 3ème tri sur le 3ème car.
    		svs.sortStringVector(2);
    		svs.display();
    		// 4ème tri ne distingue toujours pas "AzErtyu" de "WxCvbn"
    		svs.sortStringVector(8);
    		svs.display();
    	}
    
    	
    }
    


    Ca devrait afficher :
    ===============================
    Tri sur le car. 0:
    AzErtyu
    QsDfghjklm
    WxCvbn
    ===============================
    Tri sur le car. 8:
    AzErtyu
    WxCvbn
    QsDfghjklm
    ===============================
    Tri sur le car. 2:
    WxCvbn
    QsDfghjklm
    AzErtyu
    ===============================
    Tri sur le car. 8:
    WxCvbn
    AzErtyu
    QsDfghjklm
    


    Bon courage pour la suite.

    Note: indique quelle version de java tu utilise la prochaine fois ;-)
    6
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Pas clair ?
    Ben, tu as ton tableau que tu souhaites trier qu'on va appeler tonTableau.
    import java.util.Collections;
    Collections.sort(tonTableau);
    

    Je vois pas comment être plus clair.

    Cordialement
    1
  3. yoann_tux Messages postés 445 Statut Membre 96
     
    Bon un petit tri vite fait

    int i = 0;
    vecteur tmp;
    while (i< length)
    {
    //listevect -> tableau de vecteurs
    //listevect[i] -> vecteur à l'indice i du tableau de vecteur listevect
    //listevect[i][2] -> 3eme cordonnées du vecteur à l'indice i.....
    
    //tu peux remplacer listevect[i][2] par une fonction genre listevect[i].getz(); qui te renverrais ta 3 eme coordonnées.
    
    
    if(listevect[i][2] > listevect[i+1][2]){
    tmp = listevect[i][2];
    listevect[i][2] = listevect[i+1][2];
    listevect[i+1][2] = tmp;
    i = i - 1;
    }
    i++;
    }
    


    en gros je fait donc un bubble sort (tri à bulles)

    0
    1. fredo
       
      Merci pour ta réponse mais je ne pense pas que je puisse l 'adapter en java .
      En fait je veux sur une liste d 'un vecteur pouvoir trier un champ de caracteres par ordre croissant .
      La seule méthode qui semble pouvoir le faire est la méthode collection.sort mais je n 'arrive pas à la mettre en place .
      0
      1. reponse > fredo
         
        void Tri(){




        for (i=0; i<tab.length-1; i++){

        double max;


        //rechercher du max et sa position

        max=tab[i];

        int i0=i;

        int j;

        for (j=i+1; j<tab.length; j++){
        if (tab[j] > max){

        i0=j;
        max=tab[j]; }
        }

        /**************************************/


        /*************Permutation*************/
        double f;

        f=tab[i];
        tab[i]=max;
        tab[i0]=f; }


        }
        0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    De mémoire, il me semble que Collections.sort est statique. Donc je dirais : Collections.sort(tonTableau);
    import java.util.Collections; //ou quelque chose du genre

    En espérant que ça marchera.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yoann_tux Messages postés 445 Statut Membre 96
     
    C'est psa clair ce que tu veux faire...
    tu peux mettre un exemple ?
    0