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 :

Implémentation en java de structures de données


Sujet :

Java

  1. #1
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut Implémentation en java de structures de données
    Bonjour,
    J'aimerais partager avec vous une question qui m'a été posée :

    Puisqu'on à disposition en java des structures de données à gogo telles que les listes et les arbres ..., pourquoi trouve -t- on souvent des utilisateurs implémenter eux même des listes à partir de tableaux ou de structures chainées , et des arbres en fabriquant une classe arbre....?

    Ma réponse :
    Pour avoir une certaine liberté et donc flexibilité au niveau de l'utilisation des méthodes qui ne sont plus de boites noires.

    Qu'en pensez vous ?
    L'immortalité existe, elle s'appelle connaissance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Je dirais dans un premier jet :

    - L'utilisateur n'as pas connaissance qu'il existe une telle structure/fonction déjà présente dans son langage.
    - Il veux apprendre. (ce que contient dans la boite noire)
    - Il a décider de réinventer la roue a tout prix ^^.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

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

  3. #3
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    Tout d'abord, merci pour ta réponse.

    L'utilisateur n'as pas connaissance qu'il existe une telle structure/fonction déjà présente dans son langage.
    En général, ce n'est pas la raison puisqu'il doit se documenter avant tout.

    - Il veux apprendre. (ce que contient dans la boite noire)
    - Il a décidé de réinventer la roue a tout prix ^^.
    Ohouiiii; ce n'est qu'une toute petite riquiqui raison, mais il faut vraiment être motivé!

    Je pense vraiment que la raison est la FLEXIBILITÉ d'utilisation des méthodes sur les données. Cela reste mon avis.
    L'immortalité existe, elle s'appelle connaissance

  4. #4
    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 wafiwafi Voir le message
    En général, ce n'est pas la raison puisqu'il doit se documenter avant tout.
    Dans un monde idéal peut-être... mais en pratique c'est rarement le cas !


    Citation Envoyé par wafiwafi Voir le message
    Ohouiiii; ce n'est qu'une toute petite riquiqui raison, mais il faut vraiment être motivé!
    En tout cas c'est un exercice intéressant

    Citation Envoyé par wafiwafi Voir le message
    Je pense vraiment que la raison est la FLEXIBILITÉ d'utilisation des méthodes sur les données. Cela reste mon avis.
    Que veux-tu dire exactement ?
    Si c'est pour réinventer ce qui existe je n'en vois pas l'intérêt (outre l'exercice justement).


    Maintenant si c'est pour bénéficier d'une autre implémentation c'est autre chose...


    a++

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    A mon avis on ne gagne rien en flexibilité concernant les listes.
    En revanche concernant l'arbre c'est un concept à part.

    Un arbre dispose de méthodes que n'ont pas les listes. Un noeud a généralement une valeur attachée et contient d'autres noeuds. Il peut s'agir d'un noeud racine, d'un noeud normal ou d'un noeud feuille. Un noeud est caractérisé par une profondeur, a éventuellement un père, est rattaché à un et un seul arbre. Un chemin se constitue d'une chaîne de noeud.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    En tout cas c'est un exercice intéressant
    Oui, c'est vrai.

    Que veux-tu dire exactement ?
    Si c'est pour réinventer ce qui existe je n'en vois pas l'intérêt (outre l'exercice justement).
    Établir sa propre classe et fabriquer ses propres méthodes selon son contexte est tout de même plus souple d'utilisation que faire appel à des méthodes dont on ne connait pas l'implémentation. C'est beaucoup plus pratique également du point de vue étude de complexité. Attention, je ne dis pas qu'il faut tout réinventer mais il arrive que le contexte exige une autre implémentation.

    Néanmoins je reste d'accord avec vos réponses!! Cela constitue un très bon exercice et c'est cette raison que dorénavant je retiens.
    Merci à vous
    L'immortalité existe, elle s'appelle connaissance

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par wafiwafi Voir le message
    Établir sa propre classe et fabriquer ses propres méthodes selon son contexte est tout de même plus souple d'utilisation que faire appel à des méthodes dont on ne connait pas l'implémentation.
    Euh. Dans le cas des structures communes fournies par Java, l'implémentation va un peu de soi quand même.
    Et puis, si on veut la connaître, il suffit de la regarder, le code source est facilement affiché dans un EDI. C'est pas franchement indigeste, il y a juste le ConcurrentModificationException fail-early qui complique un peu les choses.

    Citation Envoyé par wafiwafi Voir le message
    C'est beaucoup plus pratique également du point de vue étude de complexité. Attention, je ne dis pas qu'il faut tout réinventer mais il arrive que le contexte exige une autre implémentation.
    Euh oui, ça arrive, dans certains cas très précis. Je n'appellerais pas ça beaucoup plus pratique, du coup.

    (Par exemple si on a une ArrayList très grande et qu'on veut en virer tous les objets marron, mais pas ceux d'autre couleur, manga, je vous raconte pas la complexité. Alors qu'il suffisait de décaler les objets qui restent vers leur nouvel index et de redéfinir la taille.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Par exemple si on a une ArrayList très grande et qu'on veut en virer tous les objets marron, mais pas ceux d'autre couleur, manga, je vous raconte pas la complexité. Alors qu'il suffisait de décaler les objets qui restent vers leur nouvel index et de redéfinir la taille.
    Qu'est-ce qui t'en empêche ?
    Tu trouves le premier marron, tu trouves combien il y en a, tu shiftes tu repars au nouvel emplacement sans oublier de tenir compte de la taille, tu vires la fin de la liste qui t'interresse plus List.sublist(newSize, list.getSize()).clear(), ensuite tu trim.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Qu'est-ce qui t'en empêche ?
    Tu trouves le premier marron, tu trouves combien il y en a, tu shiftes tu repars au nouvel emplacement sans oublier de tenir compte de la taille, tu vires la fin de la liste qui t'interresse plus List.sublist(newSize, list.getSize()).clear(), ensuite tu trim.
    D'accord, mais cela nécessite de savoir que c'est une ArrayList (ou similaire) et pas une LinkedList (ou similaire.)

    Autrement dit, ce n'est pas mon rôle, moi l'utilisateur, d'implémenter ça. L'implémentation de List que j'utilise devrait faire au mieux par elle-même. C'est un problème de principe que je doive utiliser des classes statiques externes pour gérer ça au lieu de juste utiliser les méthodes fournies par l'interface.
    (Je sais bien que l'interface ne peut pas définir tout le monde et son neveu, mais je prouve qu'il y a des cas qui s'en retrouvent embarrassés.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Dans ce cas tu ne créées pas une nouvelle implémentation de List ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Je plussoie plusieurs propositions faites :
    - l'utilisateur n'a pas connaissance de ce qui existe (et en pratique ça peut arriver souvent, le temps de documentation étant souvent limité)
    - l'utilisateur préfère réinventer la roue, le fait est que des gens pensent que leur solution est meilleure (et ça peut être du justement au manque de connaissance, ça se recoupe)
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Dans ce cas tu ne créées pas une nouvelle implémentation de List ...
    Moi non. Si nécessaire j'étends ArrayList avec des méthodes adaptées : ce n'est pas optimal dans le détail mais c'est optimal en complexité.

    Il y a des exemples plus complexes où cela n'ira pas, par contre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    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
    Citation Envoyé par thelvin Voir le message
    (Je sais bien que l'interface ne peut pas définir tout le monde et son neveu, mais je prouve qu'il y a des cas qui s'en retrouvent embarrassés.)
    [hors-sujet] C'est une limitation dû au fait que les interfaces sont figées.
    Toutefois cela devrait évoluer avec les "defenders-methods" de Java 8


    @Nemek : chaque implémentation a ses qualités et ses défauts.
    Bien sûr la plupart du temps une ArrayList suffit amplement. Mais tu as des cas particulier où elle n'est pas forcément adapté...
    Dans ce cas on peut envisager une autre implémentation existante voir carrément d'implémenter la sienne


    a++

  14. #14
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    C'est pas pour faire mon chieur mais bien pour ouvrir mon esprit "étroit" (je précise au cas où) : Quel autre implémentation de la liste autre qu'une chaîne ou un tableau est nécessaire ?

    Le seul cas où il m'est arrivé de songer à faire une autre implémentation c'est de mixer le tableau et la chaîne ; comme pour l'implémentation des HashMap. Mais en y réfléchissant, une optimisation des algorithmes d'utilisation de la liste était suffisante.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par thelvin Voir le message
    D'accord, mais cela nécessite de savoir que c'est une ArrayList (ou similaire) et pas une LinkedList (ou similaire.)

    Autrement dit, ce n'est pas mon rôle, moi l'utilisateur, d'implémenter ça. L'implémentation de List que j'utilise devrait faire au mieux par elle-même. C'est un problème de principe que je doive utiliser des classes statiques externes pour gérer ça au lieu de juste utiliser les méthodes fournies par l'interface.
    (Je sais bien que l'interface ne peut pas définir tout le monde et son neveu, mais je prouve qu'il y a des cas qui s'en retrouvent embarrassés.)
    Tu crée ta propre classe, qui étends LinkedList et qui, pour supprimer tous les marrons, fait un iterator accompagné de son delete.

  16. #16
    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
    Comme je l'ai dit dans la plupart des cas une ArrayList est amplement suffisante...

    Mais cela ne répond pas forcément à tous les besoins du monde


    a++

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

Discussions similaires

  1. Structure de données en java
    Par inès83 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/04/2008, 22h41
  2. Structure de donnée de type arbre en Java ?
    Par joseph_p dans le forum Général Java
    Réponses: 17
    Dernier message: 16/09/2006, 15h20
  3. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  4. 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