IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Débutant] LinkedHashSet comment le trier


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut [Débutant] LinkedHashSet comment le trier
    On ma deja pas mal aider au sujet des List , Set ect , et je penser etre au top , mais c'est pas le cas.
    J'ai utiliser une LinkedHashSet , pour stocker des Strings a partir de la ligne de commandes , et je doit a présent les trié par ordres alphabétique.
    Ayant eu as faire pareil sur un Arraylist , j'ai repris l'aide que l'on m'avez fourni , en implementant Comparable , et en redefinissant compareTo().
    Malheureusement sa marche pas , je copie le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    import java.util.*;
    public class stockAset implements Comparable{
    	static LinkedHashSet hs = new LinkedHashSet();
    	public static void main(String[] args){
    		for(int i=0;i<args.length;i++){
    			if(contientA(args[i])){
    				hs.add(args[i]);
    			}
    		}
    		Collections.sort(hs);
    		lectureByIt(hs);
    	}
    	public static boolean contientA(String tmp){
    		boolean test=false;
    		char valeur = 'a';
    		int nbr = tmp.length();
    		for(int y=0;y<nbr;y++){
    			if(tmp.charAt(y)== valeur){
    				test=true;
    				break;
    			}
    			else{
    				test=false;
    			}
    		}
    		return test;
    	}
    	public int compareTo(Object a){
    		int result=0;
    		String tmpa,tmpb;
    		char ca[],cb[];
    		tmpa = this.toString();
    		tmpb = (String)a;
    		ca = tmpa.toCharArray();
    		cb = tmpb.toCharArray();
    		if(ca[0] > cb[0]){
    			result = -1;
    		}
    		if(ca[0] < cb[0]){
    			result = 1;
    		}
    		if(ca[0] == cb[0]){
    			result = 0;
    		}
    		return result;
    	}
    	public static void lectureByIt(LinkedHashSet itmp){
    		System.out.println("Affichage par Iterateur");
    		Iterator it = itmp.iterator();
    		while(it.hasNext()){
    			System.out.println(it.next().toString());
    		}
    	}
    }
    L'erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    stockAset.java:10: cannot resolve symbol
    symbol  : method sort (java.util.LinkedHashSet)
    location: class java.util.Collections
                    Collections.sort(hs);
                               ^
    1 error

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    L'erreur vient du fait qu'il n'existe pas de méthode sort() avec un objet de type Set en paramètre.
    Seule les collections de type List peuvent être triées avec sort()...

    C'est un peu logique car l'interface Set n'a pas de notion d'ordre des éléments (même si son implémentation LinkedHashSet ordonne les données selon leurs ordre d'ajout).

    Pourquoi utilises-tu un Set ? Pourquoi pas une List ???

    Sinon une solution 'simple' serait de faire une List à partir des éléments de ton Set. De la trier puis de créer une nouvelle LinkedHashSet...

    a++

  3. #3
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    Ben en faite on me le demande c'est une serie d'exercice a faire ( sans explications terrible ).
    Je peux juste préciser qu'il me faut la trier d'abord par ordre alphabetique et l'exercice suivant par nombre de caractere.
    J'ai vu qu'il existait une SortedSet , mais c'est une interface , donc je doit la faire implementer ou elle l'est deja de base ?
    Pourrai-ja appliquer sort() dessus ou une autre chose ?
    Enfin je patouille un peu dans toutes ces histoires.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    La classe LinkedHashSet conserve l'odre d'ajout des elements, mais tu ne peux pas modifier cet ordre, car l'interface Set n'a pas cette possibilitée...

    Tu peux toujours utiliser TreeSet (qui est l'implémentation de SortedSet)...
    Le tri s'effectuera à l'ajout des éléments selon l'ordre naturel de Comparable...

    Mais tu ne peux donc pas utiliser la méthode sort() puisqu'elle utilise des List et non des Set !!!

    En effet, l'interface List possède une notion d'ordonnancement grâce à ses méthodes get() et set() indéxées...
    Pour obtenir un Set trié, tu dois trier les éléments avant de les ajouter dans un LinkedHashSet, ou alors utiliser des objet Comparable que tu ajoutes dans un TreeSet...

    A mon avis, l'utilisation de Set n'est donc pas très pertinente...
    Il serait prefférable d'utiliser directement des List...

    a++

  5. #5
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    Ah merci grace a TreeSet cela vas comme il faut , j'avais tenté avec SortedSet mais sans résultats.
    Merci de ton eclaircissements ^^
    je copie la source si quelqu'un d'autre tombe sur cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    import java.util.*;
    public class stockAset implements Comparable{
    	static TreeSet hs = new TreeSet();
    	public static void main(String[] args){
    		for(int i=0;i<args.length;i++){
    			if(contientA(args[i])){
    				hs.add(args[i]);
    			}
    		}
    		lectureByIt(hs);
    	}
    	public static boolean contientA(String tmp){
    		boolean test=false;
    		char valeur = 'a';
    		int nbr = tmp.length();
    		for(int y=0;y<nbr;y++){
    			if(tmp.charAt(y)== valeur){
    				test=true;
    				break;
    			}
    			else{
    				test=false;
    			}
    		}
    		return test;
    	}
    	public int compareTo(Object a){
    		int result=0;
    		String tmpa,tmpb;
    		char ca[],cb[];
    		tmpa = this.toString();
    		tmpb = (String)a;
    		ca = tmpa.toCharArray();
    		cb = tmpb.toCharArray();
    		if(ca[0] > cb[0]){
    			result = -1;
    		}
    		if(ca[0] < cb[0]){
    			result = 1;
    		}
    		if(ca[0] == cb[0]){
    			result = 0;
    		}
    		return result;
    	}
    	public static void lectureByIt(TreeSet itmp){
    		System.out.println("Affichage par Iterateur");
    		Iterator it = itmp.iterator();
    		while(it.hasNext()){
    			System.out.println(it.next().toString());
    		}
    	}
    }
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 09/08/2005, 14h29
  2. [Débutant][JTable] Comment ça marche?
    Par Nasky dans le forum Composants
    Réponses: 7
    Dernier message: 02/08/2005, 15h04
  3. [Débutant] [Applet] Comment signer une applet
    Par xterminhate dans le forum Applets
    Réponses: 3
    Dernier message: 09/06/2005, 18h27
  4. [Débutant][JList] Comment ça marche dans mon cas ?
    Par Invité dans le forum Composants
    Réponses: 31
    Dernier message: 28/06/2004, 10h45
  5. [Débutant][javadoc] comment générer la javadoc?
    Par zozolh2 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2004, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo