Partage
  • Partager sur Facebook
  • Partager sur Twitter

getIndice d'une ArrayList ?

    20 novembre 2010 à 14:14:35

    Bonjour à tous!

    Je suis débutante en java et je me posais une question pour un projet que j'ai a faire :
    Lorsqu'on manie des objets d'une ArrayList, comment est-ce qu'on peut faire pour récuperer d'indice de cet objet dans l'ArrayList?
    j'ai ai absolument besoin pour utiliser certaines methodes comme remove(i) qui utilise l'indice de l'objet pour pouvoir le supprimer!

    Merci beaucoup!
    :D
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2010 à 14:56:25

      Salut,
      Tu fais une boucle qui parcoure ta liste et qui fait des tests :
      for (int index = 0; index < arrayListe.length, index++)
      if(arrayList.get(index) == objet) {arraList.remove(index);}
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 novembre 2010 à 15:05:07

        Sinon,

        tu peux faire:
        liste.remove(tonObjet);
        


        le lien javadoc -> ici <-
        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2010 à 15:49:20

          Citation : SamoO

          Salut,
          Tu fais une boucle qui parcoure ta liste et qui fait des tests :
          for (int index = 0; index < arrayListe.length, index++)
          if(arrayList.get(index) == objet) {arraList.remove(index);}


          C'est très bien de proposer des solutions mais évite de poster n'importe quoi quand même, il y a 4 erreurs en 2 lignes, pas de balises et pas d'indentation.
          Le code que tu as posté donnerait :
          for(int i = 0; i < arrayList.size(); i++) 
             if(arrayList.get(i) == objet) 
                 arrayList.remove(i);
          

          mais comme l'a fait remarquer Syrion75 il y a beaucoup plus simple.
          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2010 à 17:03:52

            <hs>@Shaddan: je peux comprendre que tu ne sois pas content quand tu lis la reponse de SamoO, mais ce n'est pas une raison de traiter sa reponse de "n'importe quoi". Tu ne sais pas dans quelle situation il se trouvait quand il postait ce message. Mais au moins il a essaye de trouver une solution/indication.
            Je précise que je ne le connais pas :D </hs>

            Pour en revenir au sujet de départ, à savoir retrouver l'indice d'un objet dans l'ArrayList, il existe déjà une méthode qui s'occupe de ça. A savoir indexOf() de la classe ArrayList.
            Cette méthode retourne l'indice du premier objet présent dans la liste.

            Mais n'utilise cette méthode que si tu en a vraiment besoin, parce qu'au fond elle ne fait que parcourir la liste comme toi tu l'aurais fait manuellement.
            Donc dans ton cas pour supprimer il est plus optimal d'utiliser remove (Object o), si par contre tu en as besoin pour autre chose, tu as la solution du indexOf
            • Partager sur Facebook
            • Partager sur Twitter
            J'ai tous les badges d'OpenClassrooms.
              20 novembre 2010 à 19:29:32

              Citation : Shaddan

              Citation : SamoO

              Salut,
              Tu fais une boucle qui parcoure ta liste et qui fait des tests :
              for (int index = 0; index < arrayListe.length, index++)
              if(arrayList.get(index) == objet) {arraList.remove(index);}


              C'est très bien de proposer des solutions mais évite de poster n'importe quoi quand même, il y a 4 erreurs en 2 lignes, pas de balises et pas d'indentation.
              Le code que tu as posté donnerait :

              for(int i = 0; i < arrayList.size(); i++) 
                 if(arrayList.get(i) == objet) 
                     arrayList.remove(i);
              


              mais comme l'a fait remarquer Syrion75 il y a beaucoup plus simple.



              T'es drôle :D
              J'ai quand même jugé lolaflorida capable de traduire vite fait mes deux lignes pondues a l'arrache, j'avais pas envie de passer 2 heures a pondre un code parfait, juste lui montrer la voie (probable) pour arriver au résultat demandé, car de toute façon si il/elle n'arrive pas à interpréter ça :euh: .
              Donc avant d'aller polluer les topics avec des réponses à la con qui ne servent pas à l'auteur du sujet, réfléchis un peu à ce que tu écrit.

              @Syrion75 : Ah ouais c'est vrai que c'est plus pratique :lol: Mais niveau performances je pense pas que ça doit changer grand chose, car la fonction doit sûrement quand même parcourir les objets. Mais c'est quand même nettement plus lisible :D
              • Partager sur Facebook
              • Partager sur Twitter
                20 novembre 2010 à 20:05:49

                Merci beaucoup pour les réponses !
                Je pense que je vais utiliser remove(Object o) je l'avais pas vue car elle est dans l'interface List et non dans la classe ArrayList.
                Il va donc falloir que je redefinisse la methode remove... Vous avez une idée de comment on fait?!
                • Partager sur Facebook
                • Partager sur Twitter
                  20 novembre 2010 à 20:23:56

                  tu n'as pas besoin de redefinir la méthode.
                  la methode marche normalement sur tous les objets du jdk.
                  mais si tu dois l'appliquer sur tes propres objets, il faut penser a redefinir la methode equals de ta classe. c'est grace a elle que la methode saura que l'objet A egal a l'objet B.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  J'ai tous les badges d'OpenClassrooms.
                    21 novembre 2010 à 4:56:14

                    Pour savoir si un objet A est égal à un objet B un simple if(A == B) suffit :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      21 novembre 2010 à 10:56:34

                      Citation : SamoO

                      Pour savoir si un objet A est égal à un objet B un simple if(A == B) suffit :)


                      Que veux-tu dire par égaux ?

                      Voilà un programme simple qui montre que des String ("Bonjour") peuvent être différentes ou égales:
                      public static void main(String[] args) throws Exception {
                      		String chaine1 = "Bonjour";
                      		String chaine2 = new String(chaine1);
                      		String chaine3 = chaine1 ;
                      		
                      		System.out.println(chaine1 + " = (" + chaine2 + ") ? " + (chaine1==chaine2) );
                      		System.out.println(chaine1 + " equals(" + chaine2 + ") ?" + (chaine1.equals(chaine2)) );
                      		
                      		System.out.println(chaine1 + " = (" + chaine3 + ") ? " + (chaine1==chaine3) );
                      		System.out.println(chaine1 + " equals(" + chaine3 + ") ?" + (chaine1.equals(chaine3)) );
                      		
                      		System.out.println(chaine3 + " = (" + chaine2 + ") ? " + (chaine3==chaine2) );
                      		System.out.println(chaine3 + " equals(" + chaine2 + ") ?" + (chaine3.equals(chaine2)) );
                      		
                      	}
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 novembre 2010 à 13:22:31

                        Citation : SamoO

                        Pour savoir si un objet A est égal à un objet B un simple if(A == B) suffit :)



                        Euh ... non.

                        Pour savoir si un objet A est egal à un objet B, il faut redéfinir la méthode equals().

                        si je prend les classes suivantes :
                        class P {
                           int x=0;
                           int y=0;
                        
                           public static void main(String[] arg)
                           {
                              P A,B;
                              A=new P();
                              B=new P();
                              System.out.println(" est ce que A==B "+(A==B));
                           }
                        }
                        


                        Sans redefinir la méthode equals, on ne pourra jamais savoir que A = B
                        • Partager sur Facebook
                        • Partager sur Twitter
                        J'ai tous les badges d'OpenClassrooms.
                          21 novembre 2010 à 17:15:05

                          En effet, j'ai parlé trop vite et sans tester désolé. Pour me faire pardonner 8)

                          public class Test {
                          	
                          	public Test() {
                          		A a = new A(220, 210);
                          		A b = new A(220, 210);
                          		A c = new A(230, 240);
                          		System.out.println("Mise au point : A == B, A != C, B != C");
                          		if (a == b) {System.out.println("a est égal à b");}
                          		if (c != a) {System.out.println("c différent de a avec ==");}
                          		if (a != b) {System.out.println("a différent de b avec ==s");}
                          		if (a.equals(b)) {System.out.println("a est égal à b avec equals");}
                          		if (!a.equals(c)) {System.out.println("a est différent de c avec equals");}
                          	}
                          
                          	class A {
                          
                          		private int x, y;
                          		public A(int x, int y) {
                          			this.x = x;
                          			this.y = y;
                          		}
                          		
                          		public boolean equals(A a) {
                          			if (a.x == this.x && a.y == this.y) return true;
                          			else return false;
                          		}
                          	}
                          }
                          


                          Ce qui rend :
                          Mise au point : A == B, A != C, B != C
                          c différent de a avec ==
                          a différent de b avec ==
                          a est égal à b avec equals
                          a est différent de c avec equals
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            21 novembre 2010 à 17:26:53

                            la redéfinition correcte de equals prend un Object en parametre, de plus lorsqu'on le redéfini, il faut egalement redéfinir hashcode, les 2 devant toujours etre cohérents pour assurer un bon fonctionnement, notamment avec les collections.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 novembre 2010 à 17:35:12

                              Citation : shakhal

                              la redéfinition correcte de equals prend un Object en parametre, de plus lorsqu'on le redéfini, il faut egalement redéfinir hashcode, les 2 devant toujours etre cohérents pour assurer un bon fonctionnement, notamment avec les collections.


                              Pour confirmer et donner un exemple, voici tout simplement la redéfinition de la méthode equals de la classe String .
                              @Override
                              public boolean equals(Object object) {
                                 if (object == this) {
                                    return true;
                                 }
                                 if (object instanceof String) {
                                    String s = (String) object;
                                    int hash = hashCode;  // Single read on hashCodes as they may change
                                    int shash = s.hashCode;
                                    if (count != s.count || (hash != shash && hash != 0 && shash != 0)) {
                                       return false;
                                    }
                                    for (int i = 0; i < count; ++i) {
                                        if (value[offset + i] != s.value[s.offset + i]) {
                                           return false;
                                        }
                                     }
                                     return true;
                                 }
                                 return false;
                              }
                              

                              Donc en se servant de ça comme exemple pour redéfinir la méthode equals ça devrait aller tout seul.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              getIndice d'une 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