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 :

Quelques soucis de compréhension avec les ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut Quelques soucis de compréhension avec les ArrayList
    J'ai effectivement quelques soucis de compréhension avec les arrayList
    J'ai bouquiner la JAVAdoc et aussi le cours sur Dev.net
    mais j'ai du mal à saisir quelques trucs.

    Par exemple, si je crée une classe crevettes
    Une autre classe brochetteCrevettes ou je crée mon ArrayList

    en gros ça donnera ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class BrochetteCrevettes{
     
    	private ArrayList<Crevette> list = new ArrayList<Crevette>();
     
    	public void addNew(Crevette crevette) {
    		list.add(crevette);
    	}
     
    	public Crevette get(int index) {
    		return list.get(index);
    	}
     
    	public String toString() {
    		String varRetour = "";
    		for (int i = 0; i < this.count(); i++) {
    			varRetour += this.get(i).toString() + "\n";
    		}
    		return varRetour;
    	}
     
    	public int count() {
    		return list.size();
    	}
    }

    suis je juste ?
    Si c'est le cas, est-ce que qqn pourrait accepter de voir mes classes pour me dire ou est ce que ça cloche dans ma liste svp,
    car je suis perdu.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut !

    T'as pas l'air d'avoir si mal compris que ca

    Ici tu as choisi d'envelopper ton arrayList dans une de tes propres classes (BrochetteCrevettes) et d'offrir au client de la classe BrochetteCrevettes seulement quelques services dérivés de la classe List.
    En général, on choisit cette solution quand on veut protéger son implémentation des classes clientes : soit du changement d'implémentation, soit pour ne pas permettre aux clients de faire tout et n'importe quoi avec notre classe.
    Par exemple, tu n'as pas mis en public une méthode qui renvoie la liste.
    Le client n'a donc pas besoin de savoir si c'est un tableau, une liste ou autre chose qui gère tes petites crevettes !

  3. #3
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut Bizarre
    Dans votre méthode toString(), pourquoi utilisez-vous this au lieu de list ?
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par pursang Voir le message
    Dans votre méthode toString(), pourquoi utilisez-vous this au lieu de list ?
    C'est parce qu'il choisit d'utiliser les méthodes qui accèdent aux propriétés de la liste. ceci permet par exemple de changer de type de données sans avoir à modifier les autres méthodes.

    Sinon, le code peut être arrangé comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public class BrochetteCrevettes
    {
    	private List<Crevette> list;
     
           public BrochetteCrevettes()
           {
               list = new ArrayList<Crevette>();
           }
     
    	public void addNew(Crevette crevette) 
           {
    	  list.add(crevette);
    	}
     
    	public Crevette get(int index) 
           {
    	  return list.get(index);
           }
     
            public int count() 
            {
    	   return list.size();
    	}
     
    	public String toString() 
           {
               StringBuilder sb= new StringBuilder();
    	   for (Crevette cv : list)
               {
    		sb.append(cv.toString() + "\n");
    	   }
    	   return sb.toString();
    	}
    }

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Bonjour,

    Je ne suis pas trop d'accord avec tes propos darrylsite.
    Je trouve pas que tes modifications améliorent la classe.

    Citation Envoyé par darrylsite Voir le message
    Sinon, le code peut être arrangé comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public class BrochetteCrevettes
    {
    	private List<Crevette> list;
     
           public BrochetteCrevettes()
           {
               list = new ArrayList<Crevette>();
           }
     
    	public void addNew(Crevette crevette) 
           {
    	  list.add(crevette);
    	}
     
    	public Crevette get(int index) 
           {
    	  return list.get(index);
           }
     
            public int count() 
            {
    	   return list.size();
    	}
     
    	public String toString() 
           {
               StringBuilder sb= new StringBuilder();
    	   for (Crevette cv : list)
               {
    		sb.append(cv.toString() + "\n");
    	   }
    	   return sb.toString();
    	}
    }

    1.En quoi instancier la liste dans le constructeur au lieu de le faire dans la déclaration de la propriété est une amélioration ?
    Je trouve ca moins bon puisque ca donne le même résultat avec plus de code de tapé sans apporter plus de lisibilité.

    2.Le fait d'utiliser ArrayList comme type d'objet déclaré n'est pas gênant dans la mesure ou le type ArrayList est interne à la classe.
    Je trouve, au contraire que c'est un choix intéressant.
    Ca insiste sur le masquage de l'implémentation de la liste d'objet : je déclare l'implémentation ArrayList comme type déclarant, car je n'ai pas peur : le client ne peut y accéder directement. .
    En déclarant List comme tu le proposes, ca peut donner l'impression que le client de la classe sait que je travaille avec des implémentations de List et qu'il faut donc le protéger des différentes implémentations. Or, ce n'est pas le cas.
    Déclarer l'interface au lieu de l'implémentation est souvent une bonne pratique, mais dans certains cas, je trouve qu'elle induit et suppose une flexibilité plus trompeuse qu'utile.

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Oula,

    La nouveauté concerne au fait l'utilisation de StringBuilder qui évite d'avoir une nouvelle chaine à chaque tour de boucle.

    Pour ce qui est de la déclaration, c'est une question de pratique en effet. Mais si on plusieurs déclarations par exemple, il serait mieux d'instance les classes dans une méthode init() par exemple au lieu de les faire directement dans la classe.
    Pour la List, comme tu l'as dit c'est juste pour utiliser les services offerts sans se soucier de l'implémentation. L'auteur du pour utilisait déjà les méthodes count() et get() de sa classe au lieu des méthode de la liste, alors utiliser les services de la List permet toujours de détacher les méthodes d'une future modification.

    Sinon, c'est juste une façon de faire, mais pas la meilleur.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/08/2013, 16h25
  2. Problème de compréhension avec les DIV
    Par akaii dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 25/02/2010, 01h32
  3. Réduire le temps de calcul: une astuce avec les ArrayList ?
    Par timbrochier dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 15/04/2008, 15h37
  4. Réponses: 17
    Dernier message: 22/01/2007, 13h34
  5. Réponses: 5
    Dernier message: 18/10/2006, 16h20

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