Détecter des doublons dans un tableau de String.

ungars2 Messages postés 4 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 23 avril 2014 - 12 sept. 2011 à 20:14
ungars2 Messages postés 4 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 23 avril 2014 - 13 sept. 2011 à 20:00
Bonjour,

que pensez-vous de ceci :

   /**
     * METHODE DE CONTROLE D'UNICITE D'UN ELEMENT DANS UN TABLEAU.
     * @param tableau Tableau de chaînes
     * @return unicite (true ou false)
     */
    private boolean controlerUniciteChaine(final String[] tableau) {
        unicite = true;
        nbDoublons = 0;
        boolean absent;
        if (tableau.length == 0) {
            unicite = false;
        } else {
            HashSet<String> set = new HashSet<String>(tableau.length);
            final Set<String> uniqueEntries = Collections.synchronizedSet(set);
            for (int i = 0; i < tableau.length; i++) {
                if (tableau[i].length() > 0) {
                    // "add" retourne "true" si ce SET ne contient pas déjà l'élément spécifié.
                    absent = uniqueEntries.add(tableau[i]);
                    if (!absent) {
                        nbDoublons = nbDoublons + 1;
                    }
                }
            }
        }
        if (nbDoublons > 0) {
            unicite = false;
        }
        return unicite;
    }

3 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
13 sept. 2011 à 08:36
Bonjour,

Je ne sais pas trop quoi te répondre, quel est ton problème avec ce code ?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
13 sept. 2011 à 09:57
Salut,
final Set<String> uniqueEntries = Collections.synchronizedSet(set);


Tu es sûr d'avoir besoin de synchroniser ton ensemble ? Je ne vois pas d'accès concurrent.

Pourquoi préciser la classe d'implémentation lors de la déclaration de ton ensemble ? C'est inutile ici, et pas très joli.

Pourquoi aller jusqu'au bout (compter tous les doublons) ? Il te suffit d'en trouver un pour conclure.

Sinon, le principe de base (utiliser un ensemble) est pertinent et très efficace.
0
ungars2 Messages postés 4 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 23 avril 2014
13 sept. 2011 à 20:00
Aucun problème, ça marche au poil.
Et je prend en compte la remarque sur le dénombrement inutile de doublons, sauf si ce compteur est déclaré en dehors de la méthode, pour restitution dans un message d'erreur.
J'utilise "Collections.synchronizedSet" pour être très explicite et aussi cet ensemble peut-être utilisé dans une application multi-threads.
0