Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Utilisation d'un ArrayList

Fonctionnement de remove()

Sujet résolu
    24 novembre 2006 à 17:14:54

    Salut,

    J'essaie, sans succes, de faire appel a la methode remove dans un Arraylist. Pouvez-vous m'aider a trouver mon erreur ?

    Une partie du code est en anglais, mais reste transparent. Demandez moi au cas ou. Je cree un objet personne compose de nom, prenom, age. Je le sauve dans un arrayList avant d'en creer un autre et de le sauver. J'appelle ensuite la methode remove sur mon ArrayList pour les detruire., mais la taille de mon ArrayList ne varie point. Cette methode est dans la classe Database

    La classe suivante (Database) me sert pour la persistance (pour l'instant)

    public class DataBase {

            private ArrayList<Individu> tableauIndividu = new ArrayList<Individu>();
           
            ...
           
            //remove method
            public void deleteIndividual(Integer position){
                    this.tableauIndividu.remove(position);
            }
           
            public void deleteAllIndividual(){
                   
                    this.tableauIndividu.clear();
            }
           
            ...
    }


    La classe de test a le code suivant:
    public class TestPersonne {

            /**
             * @param args
             */

           
            public static void main(String[] args) {
                    // TODO Auto-generated method stub
                           
                    //Create the two test individual
                    ...
                   
                    //Playing around with them
                    ...
                   
                    //Deleting Ben
                    System.out.println("Deleting individaul 2");
                    System.out.println("Avant Deletion");
                    System.out.println("Nb Individu: " + myDatabase.countIndividu());
                   
                    System.out.println("Apres Deletion");
                    myDatabase.deleteIndividual(0);
                    System.out.println("Nb Individu: " + myDatabase.countIndividu());
                    System.out.println(myDatabase.getIndividu(0).toString());
                    System.out.println(myDatabase.getIndividu(1).toString());
                   
                    System.out.println("Delete All");
                    System.out.println("Avant Deletion");
                    System.out.println(myDatabase.countIndividu());
                   
                    myDatabase.deleteAllIndividual();
                   
                    System.out.println("Apres deletion");
                    System.out.println(myDatabase.countIndividu());
            }
    }


    L'execution produit

    Adding individual 1
    Nom: Bush Prenom: George Age: 14
    Nb Individu: 1
    Adding individual 2
    Nom: Steven Prenom: Ben Age: 02
    Nb Individu: 2

    ...

    Deleting individaul 2
    Avant Deletion
    Nb Individu: 2
    Apres Deletion
    Nb Individu: 2
    Nom: Bush Prenom: George Age: 02
    Nom: Steven Prenom: Ben Age: 75
    Delete All
    Avant Deletion
    2
    Apres deletion
    0


    En essayant de detruire le 1er personne, idem. Avez vous une idee ?
    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2006 à 17:37:55


      public void deleteIndividual(int position){
             this.tableauIndividu.remove(position);
      }



      en mettant Integer à la place de int la JVM cherchait un élément de ton arrayList qui était ton Integer pour le supprimer alors que tou souhaite appparement simplement supprimer l'élément en position int ...

      remove(Object o) revient à chercher la position de o dans ton arraylist (mettont i) et à faire remove(i)...
      comme il n'y avait pas de Integer dans ta liste il n'y avait rien de supprimé !
      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2006 à 17:57:19

        Merci de la reponse aussi rapide. J'ai en effet change Integer pour int, et j'arrive au resultat attendu. Pour autant, je n'ai pas saisi dans ton explication mon erreur:

        - Je cherchais a detruire la personne a la position <position>. Mon premier code declarait <position> de type Integer. L'objet Integer et le type primitif int n'ont t il pas la meme representation, a savoir la valeur d'un entier ? Si ce n'est le cas, comment se fait t il que mes autres fonctions, qui declarent toutes un Integer, me renvoient bien les objets recherches.

        Ex:
        public void editIndividual(Integer position, String name, String prenom, String age){
                       
                        this.tableauIndividu.get(position).setNom(name);
                        this.tableauIndividu.get(position).setPrenom(prenom);
                        this.tableauIndividu.get(position).setAge(age);
                }


        ou encore

        public Individu getIndividu(Integer position){
                        return (Individu)tableauIndividu.get(position);
                }


        Je retire de ton explication que j'ai interet a utiliser la primitive plutot que l'objet.

        Merci de ton eclairage.
        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2006 à 14:17:05

          le probleme c'est que l'interface arraylist implémente deux fonctions remove

          remove (int position)
          remove (Object o)

          et quand tu mets Integer dans remove il prend la deuxieme implémentation pcq Integer n'est pas int
          Integer hérite de Object
          int est primitif

          aussi je te conseil de toujours utiliser int quand cela ne te pose pas de probleme tu n'auras pas de surprises

          de plus


          int i=5;
          Integer ii=new Integer(5);
          int j;
          Integer jj;

          j=i;
          jj=ii;
          i=6;
          ii=6;

          // au final j = 5 et jj = 6 ...

          :p

          java copie les Objets par référence, sauf pour les primitifs et String
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2006 à 22:51:31

            Merci pour ces precisions
            • Partager sur Facebook
            • Partager sur Twitter

            [Java] Utilisation d'un ArrayList

            × 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