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

Java Discussion :

Structures de données : List ou HashTable


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Par défaut Structures de données : List ou HashTable
    Bonjour,

    Je me pose une question en terme de complexité des structures de données disponibles en Java.

    Je souhaite maintenir une liste de String sans doublon avec des ajouts/suppressions successifs. A tout moment, je dois être capable de savoir si une liste contient déjà une String demandée.

    Alors le moyen le plus naturel de faire en Java est d'avoir un objet Arraylist<String> et vérifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monArrayListe.contains(autreString);
    chaque fois. Mais en termes de complexité, la recherche dans une liste est très supérieure à la recherche dans une table de hachage (Hashtable).

    Etant donné que je suis sur un serveur (l'espace de stockage n'est donc pas une limite), et que cette requête de recherche se fait très souvent en comparaison des requêtes d'ajouts/suppressions, est-il plus efficace en terme de temps d'exécution de stocker mes Strings dans une Hashtable<String, Short> (Short parce que la Hashtable Java doit avoir 2 dimensions), ou dans une Arraylist de String ? En d'autres termes, est-ce que pour les List Java l'appel à la méthode contains est plus performant qu'un parcourt itératif qui s'avère coûteux sur des listes importantes ?

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Si l'unicité est un critère important, je pencherai plutôt vers un Set (http://docs.oracle.com/javase/6/docs.../util/Set.html).

    La plus adaptée à des ajouts/retraits massifs par contre ... je dirai HashSet au vu de ce que je lis dans la doc (temps constant pour contains, add et remove), mais je ne suis pas pleinement convaincu.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par K-you Voir le message
    Alors le moyen le plus naturel de faire en Java est d'avoir un objet Arraylist<String>
    Non. Un HashSet<String>.

    Citation Envoyé par K-you Voir le message
    est-il plus efficace en terme de temps d'exécution de stocker mes Strings dans une Hashtable<String, Short> (Short parce que la Hashtable Java doit avoir 2 dimensions), ou dans une Arraylist de String ?
    Un HashSet de String. Ça fonctionne avec des tables de hachages comme Hashtable, ce qui fait des performances similaires, mais :
    - Ça évite de se traîner une deuxième dimension inutile.
    - Hashtable est synchronisé, ce qui n'est pas forcément ce que tu veux et peut se répercuter sur les performances. HashSet n'est pas synchronisé et n'a pas ce problème, mais on peut en avoir une vue synchronisée avec Collections.synchronizedSet() si nécessaire.

    Citation Envoyé par K-you Voir le message
    En d'autres termes, est-ce que pour les List Java l'appel à la méthode contains est plus performant qu'un parcourt itératif qui s'avère coûteux sur des listes importantes ?
    Non, c'est un parcours itératif tout simple, et donc, coûteux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    Salut,


    Les Set sont fait pour cela. Un Set correspond à une collection d'élément non-ordonné mais unique !


    L'implementation HashSet utilise une table de hachage pour un accès plus rapide...


    a++


    [edit] grillé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Par défaut
    Merci, tout est dit. Résolu !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2014, 21h21
  2. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  3. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

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