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

Langage Java Discussion :

Set de tableaux de String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut Set de tableaux de String
    Salut
    je veux créer un Set de tableaux de String, mais j'ai le problème des doubles, chose que j'ai pas compris, car cela n'a pas de sens, puisque je travaille avec un Set, et je pense pas que cela ne nécessite pas une redéfinition des méthodes hashcode et equals !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String[] o1 = {"a","z","r"};
    String[] o2 = {"aa","zz","rr"};
    String[] o3 = {"aaa","zzz","rrr"};
    Set<String[]> set = new HashSet<String[]>();
    set.add(o1);set.add(o2);set.add(o3);
    String[] o = {"aaa","zzz","rrr"};
    set.add(o);
    System.out.println(set.size()); //ça donne 4

    avez vous une idée sur la dessus?
    Et merci.

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    La méthode equals sur les tableaux n'est pas une comparaison de contenu mais uniquement de référence. Il va te falloir utiliser un autre type, comme une collection ou alors un type custom qui contiendra un tableau et dans lequel tu redéfinis equals() et hashCode().

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    En fait, il y a un moyen simple de contourner le problème.
    Tu dois utiliser un TreeSet (plutôt qu'un HashSet) et implémenter un Comparator.

    Le Comparator :
    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
     
    public class TabCompare implements Comparator<String[]> {
     
    	/*
    	 * (non-Javadoc)
    	 * 
    	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
    	 */
    	@Override
    	public int compare(String[] o1, String[] o2) {
    		if (o1.length < o2.length) {
    			return -1;
    		} else if (o1.length > o2.length) {
    			return 1;
    		}
    		for (int i = 0; i < o1.length; i++) {
    			int val = o1[i].compareTo(o2[i]);
    			if (val != 0) {
    				return val;
    			}
    		}
    		return 0;
    	}
     
    }
    Ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		String[] o1 = { "a", "z", "r" };
    		String[] o2 = { "aa", "zz", "rr" };
    		String[] o3 = { "aaa", "zzz", "rrr" };
     
    		Set<String[]> set = new TreeSet<String[]>(new TabCompare());
    		// Set<String[]> set = new HashSet<String[]>();
    		set.add(o1);
    		set.add(o2);
    		set.add(o3);
    		String[] o = { "aaa", "zzz", "rrr" };
    		set.add(o);
    		System.out.println(set.size()); // ça donne 3
    Et voila
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    La solution proposé par Baptiste me semble la meilleur, tout particulièrement si tes tableau sont de taille importante. La méthode de kodo est très élégante, j'y avait pensé, mais elle me semble un peu lourde lorsque la comparaison est coûteuse, ça méthode peut tout de même être intéressant si tu as besoin d'avoir des groupes proches ( mais encore faut t'il définir ce que proche veux dire ).

    Ce que tu pourrais faire c'est utilisé une classe englobante de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class GArray
    {
    String[] arr = null;
    int hashcode;
    GArray(String[] arr)
    {
    this.arr = arr;
    hashcode = java.util.Arrays.deepHashCode(arr);
    }
    public int hashCode()
    {
    return hashcode;
    }
    }
    Mon code suppose bien entendu que tu ne change pas le contenu des tableau durant l'utilisation du Set, au cas contraire il faudra que tu calcul le hashcode à chaque fois.

    François

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/08/2007, 09h11
  2. [Tableaux] Query Strings 2-probs
    Par MrBean02 dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2007, 10h07
  3. tableaux de String dans un vector
    Par aymanouch dans le forum Langage
    Réponses: 2
    Dernier message: 08/04/2007, 12h04
  4. [Tableaux] Un string est-il un booléen ? Abhération
    Par Juxener dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2006, 14h09
  5. Tableaux de string (suite)
    Par Claude URBAN dans le forum C++
    Réponses: 3
    Dernier message: 09/08/2006, 11h13

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