Partage
  • Partager sur Facebook
  • Partager sur Twitter

diffrence entre ArrayList et List

    6 juin 2008 à 20:50:01

    salut ,j'aimerai savoir la différence entre :
    List l=new ArrayList
    et
    ArrayList l=new ArrayList
    Et merci beaucoup pour l'aide
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      6 juin 2008 à 22:21:50

      Si je ne me trompe pas un objet List est un objet graphique. Il permet d'afficher une liste dans une interface graphique, comme plusieurs mots l'un en dessous de l'autre. A confirmer parce que je ne suis pas très familier avec les objets graphique de Java. :-°

      Tandis qu'un objet ArrayList est un tableau dynamique, c'est à dire qui n'a pas de taille définie. Lors de l'instanciation d'un objet ArrayList la taille initiale est de 10 je crois et si t'as 20 éléments à stocker cela ne posera pas de problèmes, la taille augmentera au fur et à mesure.

      Un petit conseil : n'hésite pas à aller consulter l'API Java sur le site de Sun. Même si c'est en anglais il faut en prendre l'habitude. ;)
      • Partager sur Facebook
      • Partager sur Twitter
        6 juin 2008 à 23:52:07

        List est une interface. ArrayList est une classe qui implémente l'interface List.
        Donc, on ne peut instancier directement List, on doit passer par une classe qui l'implémente. Si tu fais ça:

        List l =new ArrayList();
        


        Ça va compiler, car ArrayList implémente List. Malheureusement, puisque l est de type List, tu ne pourra appeler que les méthodes contenues dans cette interface. Tandis qu'avec cette version:

        ArrayList l = new ArrayList();
        


        Tu aura accès à toutes les méthodes d'ArrayList. Je te suggère donc de privilégier la seconde version...
        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2008 à 0:55:24

          Citation


          Si je ne me trompe pas un objet List est un objet graphique.


          NE pas confondre java.awt.List et java.util.List.

          List = new ArrayList est plus flexible dans le sens où tu peux passer très facilement à une LinkedList par exemple, ou une autre implémentation de l'interface List. ON utilise la puissance du polymorphisme.
          • Partager sur Facebook
          • Partager sur Twitter
            7 juin 2008 à 10:03:57

            Citation : Ice_Keese

            List est une interface. ArrayList est une classe qui implémente l'interface List.
            Donc, on ne peut instancier directement List, on doit passer par une classe qui l'implémente. Si tu fais ça:

            List l =new ArrayList();
            



            Ça va compiler, car ArrayList implémente List. Malheureusement, puisque l est de type List, tu ne pourra appeler que les méthodes contenues dans cette interface. Tandis qu'avec cette version:

            ArrayList l = new ArrayList();
            



            Tu aura accès à toutes les méthodes d'ArrayList. Je te suggère donc de privilégier la seconde version...



            Pour List, il faut mieux toujours utiliser des objets de types List, au contraire, cela permet d'utiliser des List indépendamment de l'implémentation.

            De plus, l'utilisation des méthodes de ArrayList qui ne sont pas dans List devraient vraiment être rare voir anecdotique
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              7 juin 2008 à 11:57:44

              Citation : QuentinC 2

              NE pas confondre java.awt.List et java.util.List.



              Autant pour moi ! J'étais allé consulter l'API mais je n'avais vu qu'il y avait java.util.List plus bas... :-°

              Au final cette discussion m'intéresse. J'ai bien compris que la classe ArrayList implémente l'interface List et que selon millie il vaut mieux utiliser des objets de type List. Mais ce que je ne comprends pas c'est pourquoi il est préférable d'utiliser des objets List.

              Vous pourriez éclairer ma lanterne s'il vous plaît ?
              • Partager sur Facebook
              • Partager sur Twitter
                7 juin 2008 à 13:01:02

                Pour ma part je vais t'expliquer. En entreprise je travail sur un projet de + 300 classes qui communique entre elle.
                L'utilisation des interfaces permet de changer rapidement le type de l'objet au moment de l'instanciation.
                Imagine si dans les 300 classes tu as ArrayList et que tu aimerais changer ;) . Bonjour le boulot. Alors que si tu déclare des List. Tu n'auras qu'une seul classe a changer
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juin 2008 à 13:40:35

                  Citation

                  Pour List, il faut mieux toujours utiliser des objets de types List, au contraire, cela permet d'utiliser des List indépendamment de l'implémentation.


                  +1. Ca rejoint ce que je disais : ça permet de passer très facilement de ArrayList à LinkedList ou à une autre implémentation.
                  En passant, même remarque pour Map vs HashMap, Queue vs LinkedList, InputStream vs une de ses sous-classes, etc. Quand on peut se limiter au dénominateur commun, c'est toujours mieux.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 juin 2008 à 15:11:06

                    de plus c'est plus optimise de passe par des List a la place des ArrayList
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 juin 2008 à 16:27:05

                      Au passage, une petite astuce pour éviter la confusion java.awt.List / java.util.List quand on écrit simplement List, pour éviter dêtre obligé d'indiquer le package complet :
                      import java.awt.*;
                      import java.util.*;
                      <gras>import java.util.List</gras>
                      


                      EDIT : Sorry, <gras> ne fonctionne pas dans <code>, je ne pouvais pas savoir mais ce bug est déjà signalé.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 juin 2008 à 17:30:34

                        Citation : daedric

                        de plus c'est plus optimise de passe par des List a la place des ArrayList



                        Ça, par contre, pas sûr, car y'a probablement du downcasting de requis dans le processus. En général, il est plus lent de passer par une interface que d'accéder à la classe elle même. Quoique les différences de vitesse sont minimes. En fait, on utilise des interfaces pour la convivialité, pas pour la performance.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 juin 2008 à 1:16:34

                          en passant une list tu balade moins d'info
                          moins de pointeur a gerer pour la vm

                          DSL pour les fautes je rep de Mon ipod
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 juin 2008 à 10:40:42

                            Citation : daedric

                            de plus c'est plus optimise de passe par des List a la place des ArrayList



                            L'expérience montre en général qu'avec la JVM de Sun (je parle de hiérarchie du type List/ArrayList)
                            Au début, une version directement avec une classe concrète est plus rapide pendant à peine 1 sec (voir moins) puis devient équivalente à une version avec interface.

                            Ceci est probablement dû au fait qu'à l'endroit utilisant fortement la liste, hotspot s'arrangera pour optimiser ce coin et la différence de performance entre les deux versions sera identique.

                            Maintenant, ça ne reste que des micro-benchmark qui ne veulent pas forcement dire énormément de chose.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 juin 2008 à 11:47:10

                              oui mais tu ne peux pas te reposer entierement sur l'opimisation qu'effectue la VM
                              autant en faire le plus possible a la main
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 juin 2008 à 19:44:17

                                Citation : daedric

                                oui mais tu ne peux pas te reposer entierement sur l'opimisation qu'effectue la VM
                                autant en faire le plus possible a la main



                                Il y a aussi un risque important de tomber sur un anti-pattern du type : Premature Optimization. De plus que je n'ai parlé que de la JVM de Sun, la comportement pourrait être différent ailleurs.

                                Les gens écrivent parfois du code en pensant que ça sera plus rapide alors que ce n'est pas forcement le cas, il vaut mieux utiliser la technique classique de développement qui favorise la lisibilité à un code optimisé (qui ne serait fait qu'en cas de nécessité).

                                Pour des besoins très particuliers (par exemple du traitement d'images), si l'image est une interface ou une classe concrète font changer fortement les performances, il faut éventuellement y réfléchir par contre.



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 juin 2008 à 23:40:11

                                  "anti-pattern du type : Premature Optimization"

                                  heu ouais mais bon faut pas exagerer non plus
                                  Il faut toujours selon moi reflechir a comment faire mieux si possible
                                  c'est pas comme si c'etait des techniques de programmation obscure ^^
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  diffrence entre ArrayList et List

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown