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

Framework .NET Discussion :

[1.1] Quelle alternative à Hashtable et ArrayList ?


Sujet :

Framework .NET

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut [1.1] Quelle alternative à Hashtable et ArrayList ?
    Bonjour,

    Afin de résoudre un pb, je cherche une collection qui aurait pour répondre au besoin suivants :
    • Savoir si un élément est déjà présent,
    • Pouvoir boucler dessus dans l'ordre ou je l'ai insérés.
    Au début, je n'avais que le premier besoin donc j'étais parti sur la hashtable. Maintenant, il faut que je boucle dans l'ordre d'insertion ... qui n'est pas garantie avec Hashtable.

    Là, j'en suis réduit à avoir une hashtable d'un coté et de l'autre une arraylist ... C'est pas terrible ...

    Si quelqu'un a une idée ! Merci !

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    Si tu travailles en dotnet 2.0 je te conseil de laisser tomber les ArrayList au profit des List .

    Sinon les ArrayList (et les List<>) ont une méthode Contains qui permet de savoir si un élément est présent dans la liste ou pas ...
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Malheureusement, je suis en 1.1 ... donc j'ai pas les templates ...

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par dev01
    Sinon les ArrayList ont une méthode Contains qui permet de savoir si un élément est présent dans la liste ou pas ...
    Bah alors maitrebn ? Faut lire les réponses jusqu'au bout !

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Oui, j'avais lu :-) !

    Je répondais uniquement sur la partie framework pour exprimer ma détresse !

    J'ai oublié de mettre la citation ...

    Alors pour info : j'ai fait quelque test et pour le moment :
    • * Hash + Arl : + mauvais en mémoire (9 Mo) et en temps (234 ms),
      * Arl tout seul : moyen partout (2 Mo & 170 ms),
      * Array typé : meilleur ( 120 Ko & 70 ms).


    Bon maintenant faudrait que j'essaye avec mes vrais objets :-) !

  6. #6
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Intéressant tes stats, mais peux-tu préciser un peu :
    combien d'éléments tu mets dedans, et que fais-tu en 239 ms ?

    Si tu peux poster ton code de test, ça m'intéresserait que qqn l'essaye aussi pour avoir un comparatif avec les List de .Net 2, pour savoir si je dois m'y mettre ou pas

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    C'est domage que tu ai besoin de l'ordre dans lequel tu les a introduite plutot qu'un ordre trié, sinon j'taurais conseillé d'implanter un modele de données qui n'est pas présent dans le framework mais qui possède les avantages d'une liste linéaire et d'un arbre de recherche (recherche en temps logarithmiques plutot que linéaire ce qui est un gain énorme pour une liste "énorme")

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Intéressant tes stats, mais peux-tu préciser un peu :
    combien d'éléments tu mets dedans, et que fais-tu en 239 ms ?
    --> Pas grand chose :-) (Je ferais plus de test demain) :
    J'ai crée 3000 éléments puis je boucle sur chaque et j'ajoute deux fois un même élément 50 fois. C'est pas énorme je sais ...


    C'est domage que tu ai besoin de l'ordre dans lequel tu les a introduite plutot qu'un ordre trié
    --> Je prends quand même ... on sait jamais ...

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Cette technique ne fonctionne que dans un ordre trié. Et il s'agit d'une implantation particulière des listes

    Si tu trouve des documents relatifs, on appel cette structure les SkipList. Si toutefois tu trouve rien dessus, laisse moi un MP je t'expliquerais le principe, meme si l'implantation est un peu plus compliquée que celle d'une vulgaire liste chainée, elle n'en reste pas moins nettement plus rapide lors d'une recherche.
    Toutefois, les skiplists ont un intérêts si tu dispose d'un entier numérique comme "clé" ou champ de référence, car c'est là quelles serons les plus interressantes. Donc si tu as un algo qui te donne une valeur numérique pour les types que tu utilise, c'est parfait

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Malheureusement ma clé est un UID ... donc je pense que cela ne marchera pas mais je vais quand même chercher sur le sujet !

    Merci !

  11. #11
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    J'avoue que je suis un peu interloqué d'une certaine contradiction entre le déroulement de la discussion ets le titre de départ:
    [1.1] Entre la hashtable et l'arraylist mais ni l'un ni l'autre
    Si c'est une alternative que tu cherches, il reste l'implémentation typée de l'extention de CollectionBase, qui d'ailleurs possède un champ de type ArrayList
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  12. #12
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    En fait, je voulais le beurre et l'argent qui va avec ... C'est à dire l'accès indexé de la hashtable ainsi que l'accès ordonné selon l'ajout de l'arraylist ...

    Sinon, effectivement, il reste cette solution.

    Ps : pour info, j'ai refait des stats et rien de surprenant :
    En augmentant le nombre d'ajout ( 6 millions en gros ):
    • La hashtable est plus rapide ( 4 sec) pour en temps mais bouffe bcp plus de mémoire (130 Mo),
    • La arrayliste est plus longue en temps ( 20 sec) mais prend moins de mémoire (21 Mo),
    • La table est pire en temps (25 secs) et idem en en mémoire (21 Mo) ...


    A noter que pendant longtemps dans mon test, le tableau était toujours meilleur en mémoire que l'arraylist ...

  13. #13
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    D'après tes derniers tests, je te conseille celui qui est le plus rapide.

    En effet, aujourd'hui, ce que tu va demander à ton application, c'est quelle soit rapide.
    Pour ce qui concerne la consommation mémoire, de nos jours, il est rare de voir un PC avec moins de 512 Mo de RAM....

  14. #14
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Points : 139
    Points
    139
    Par défaut
    Au départ, je pensais comme toi ... mais depuis j'ai changé :-) !

    Donc je suis parti sur une solution intermédiaire (ArrayList) en attendant de faire une collection fortement typée ...

    Merci à tous pour votre aide !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2006, 10h03
  2. Base de donnée (portable) quelle alternative ?
    Par Invité dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/04/2006, 12h57
  3. [Frwk 2.0]Quelles alternatives libres aux VSEXpress?
    Par neguib dans le forum Général Dotnet
    Réponses: 15
    Dernier message: 30/12/2005, 11h12
  4. Flash MX quelle alternative ?
    Par KinF dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 07/09/2005, 11h18
  5. [Collections][performances] HashTable ou ArrayList ?
    Par NikauSenpeï dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 17/03/2005, 10h25

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