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 :

Recherche rapide de chaine dans une liste


Sujet :

Langage Java

  1. #1
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut Recherche rapide de chaine dans une liste
    Salut,

    Je voudrais savoir si quelqu'un a déjà du réaliser un Auto Complete un peu spécial. Je voudrais pouvoir proposer dans la liste de l'autocomplete un certain nombre de chaines qui contiennent la chaine entrée, par exemple :

    Si je rentre 810, je dois lui proposer par exemple : 124532810, 12354848105 ....

    En ce moment je dispose d'un auto complete classique qui se base sur la fonction Collections.benarySearch pour calculé l'index de la chaine rentrée.

    Je voudrais donc savoir s'il existe une méthode qui me permet de renvoyer l index dans ce genre de cas, sans avoir a tout recoder (une sorte de binarySearch). Surtout que cette recherche doit être très performante puisque mon ArrayList peut contenir des centaines de milliers de chaines. Pour que ça soit utilisable cette recherche doit être en un log(n)

    Toute proposition est la bienvenue

    Merci beaucoup

  2. #2
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Je viens de modifier le comparator du binarysearch pour qu'il me renvoit 0 au cas ou la chaine contient le mot entrée. ça à l'aire de marcher mais je suis pas très convaincu ...

    Il faudra que je fasse plus de test, mais en tous cas ça me permet d'avoir une performance assez bonne

    Des idées !!

    EDIT

    Cette méthode ne marche pas toujours (surtout quand la liste devient non triée)

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Esil2008 Voir le message
    Cette méthode ne marche pas toujours (surtout quand la liste devient non triée)
    C'est tout à fait normal puisque la liste doit être trié selon l'ordre du Comparator.
    Or tu détournes l'utilisation du Comparator car il ne représente plus un ordre entre les éléments...


    Bref tu ne devrais pas utiliser binarySearch() mais ta propre méthode de recherche qui utilisait un filtre pour accepter ou pas les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    interface Filter<E> {
     
    	public boolean accept(E value);
     
    }
    Ce qui te donnerait une méthode du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static <E> E searchFirst(List<E> list, Filter<E> filter) {
    		for(E element : list) {
    			if (filter.accept(element)) {
    				return element;
    			}
    		}
    		return null;
    	}

    a++

    [edit] Maintenant si tu utilises de très grandes listes, il faudrait voir quelles sont les algorithmes les plus adapté pour améliorer les temps de recherches...

  4. #4
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Donc il existe pas une méthode Java que je pourrais utiliser directement. Je dois absolument développer ça moi même ?

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

Discussions similaires

  1. [XL-2010] Recherche sous chaine dans une liste
    Par lbar012001 dans le forum Excel
    Réponses: 7
    Dernier message: 29/08/2012, 14h21
  2. Recherche chaine dans une liste
    Par Clorish dans le forum Général Java
    Réponses: 7
    Dernier message: 28/03/2008, 11h49
  3. Réponses: 14
    Dernier message: 26/10/2006, 23h43
  4. Recherche sur 2 elements dans une liste box.
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 18h43
  5. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23

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