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

Collection et Stream Java Discussion :

ArrayList<String> ou List<String> ?


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut ArrayList<String> ou List<String> ?
    Bonjour
    y'a t'il un avantage d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<String> myList = new ArrayList<String>();
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> myList = new ArrayList<String>();
    et puis, c'est quoi là différence vu que les deux marche aussi bien l'un que l'autre
    Merci

  2. #2
    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,


    En règle général il est préférable d'utiliser List<?> qui permet de faire abstraction du type réel de la liste, et donc de proposer un code plus générique. C'est très important sur les définitions de méthodes, afin de ne pas imposer un type concrêt. D'ailleurs selon notre besoin on peut même utiliser des types encore plus abstrait tel que Collection<?> ou Iterable<?>...

    Par contre le fait d'utiliser ArrayList<?> te fait travailler sur le type précis, et permet donc des traitements spécifiques à l'implémentation. Le principal exemple qui me vient en tête concerne la méthode trimToSize() d'ArrayList.

    ArrayList utilise un tableau en interne, qui est redimensionné automatiquement. Pour des raisons de performance, ce tableau peut-être plus grand que nécessaire. La méthode trimToSize() permet donc de réduire ce tableau interne à la taille utile, afin d'éviter d'utiliser inutilement de la mémoire si on sait que l'on ne va plus rajouté d'éléments.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public List<String> getAll() {
     
        ArrayList<String> results = new ArrayList<String>();
     
        // Traitement qui ajoutes des éléments dans results
        // ...
     
     
        results.trimToSize();
     
        return results; // mais on retourne quand même une List<String>
    }
    a++

  3. #3
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut
    Avec List<?> dans le cas precedent, on ne pourra pas utilisé trimToSize()??
    merci pour votre réponse

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    Non, ce n'est pas possible car la méthode trimToSize(), est définie dans le classe ArrayList et non dans la l'interface List.

    Si tu déclares une List tu ne pourras appeler que des méthodes disponibles sur l'interface List.

  5. #5
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut
    Ah d'accord Merci a vous pour votre aide

  6. #6
    Membre averti
    Profil pro
    Devellopement
    Inscrit en
    Juin 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Devellopement

    Informations forums :
    Inscription : Juin 2004
    Messages : 22
    Par défaut
    Citation Envoyé par 0redd Voir le message
    Avec List<?> dans le cas precedent, on ne pourra pas utilisé trimToSize()??
    merci pour votre réponse
    Tu pourrais toujours l'utiliser via un transtypage et en t'assurant que ton objet retourné appartienne bien à la classe ArrayList


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayList<String> arrayList = (ArrayList<String>)getAll();
    arrayList.trimToSize();
    Mais du coup il n'y a pas d'intêret de retourner un objet générique alors qu'on a besoin de spécifique !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/01/2013, 15h25
  2. List<Map<String, Object>> en List<User>
    Par scrutin dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/12/2012, 19h06
  3. transformer liste en string puis en liste et ne lire que 1 element sur 2
    Par cedric190985 dans le forum Général Python
    Réponses: 5
    Dernier message: 26/03/2010, 15h02
  4. inserer une string dans une liste de string
    Par la_reine dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 14/05/2008, 08h07
  5. [ArrayList] contains() sur une liste de String
    Par nicotine002 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/01/2008, 19h19

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