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 :

Redéfinir la méthode ArrayList.indexOf()


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Redéfinir la méthode ArrayList.indexOf()
    Bonjour,

    Je rencontre un problème lorsque je veux redéfinir la méthode indexOf() de la classe ArrayList. J'ai dejà défini hashCode() et et equals() mais maintenant je dois rechercher si le livre de mon ArrayList est égal à celui passé en argument de indexOf(). Le code est le suivant :
    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
     
    @Override
    public int hashCode() { // Redefining the hashCode() method
    	return title.hashCode() ^ author.hashCode();
    }
     
    @Override
    public boolean equals(Object o) { // Redefining the equals() method
    	if(!(o instanceof Book)) { // Check if the class of o is a subclass of Book
    		return false;
    	}
    	Book book = (Book)o; 
    	return title.equals(book.title) && author.equals(book.author);
    }
     
    public static void main(String[] args) {
           var b1 = new Book("Da Java Code", "Duke Brown");
           var b2 = b1;
           var b3 = new Book("Da Java Code", "Duke Brown");
     
            var list = new ArrayList();
    	list.add(b1);
     
            for(Object o: list) {
                 System.out.println(o);
    	}
     
            System.out.println(list.indexOf(b2));
    	System.out.println(list.indexOf(b3));
    Le problème principal est que je ne sais pas comment parcourir ma liste pour vérifier la similarité dans la fonction indexOf() à redéfinir comme je n'ai que l'objet o en paramètre, et donc je n'ai pas accès à la liste.

    Merci d'avance.

  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,

    Je ne comprends pas trop ton problème ni ce que tu veux faire, ni pourquoi tu parles de redéfinir indexOf() alors que tu utilises un ArrayList...

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Voilà, en gros, ce qu'il faudrait c'est ne pas inventer des mots. Et au lieu de ça, montrer exactement à quel moment tu coinces.

    Parcourir la liste c'est indexOf() qui le fait. Et il le fait bien donc il n'y a pas à redéfinir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Bonjour,

    Je me suis peut-être mal expliqué, mais ce que je veux faire c'est rajouter dans ma classe Book, la méthode indexOf() sur ArrayList qui me permet de vérifier que deux livres ont les mêmes caractéristiques.

    C'est donc une redéfinition car je dois utiliser obligatoirement l'annotation @Override pour vérifier cela.

    Merci.

  5. #5
    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
    indexOf() est une méthode d'ArrayList, et tout ce que tu as at faire pour l'utiliser, c'est d'utiliser des objets qui définissent correctement la méthode equals().

    Donc : quel est ton problème exactement ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    sauf qu'on n'ajoute pas dans une classe une méthode d'une autre classe (sauf par le biais de l'héritage, ce qui n'aurait aucun sens entre Book et ArrayList).

    Donc non seulement ce n'est pas une redéfinition, mais ce n'est rien du tout qu'un amas de confusion dénué de sens.
    Ce qui arrivera souvent tant que tu te diras "j'ai besoin de faire ceci, et je suis sûr que pour faire ceci j'ai besoin de cela, donc je vais demander comment faire cela." Non. Il faut demander comment faire ceci. Ton impression que tu auras besoin de cela pour ça, pourrait très bien être une idée bizarre et fausse, et c'est le cas ici.
    Je te reproche de le faire, mais c'est courant dans l'apprentissage de l'informatique. En anglais, cette mauvaise approche s'appelle the XY Problem.

    Pour vérifier si deux livres ont les mêmes caractéristiques, indexOf() n'a rien à faire là. C'est ce que fait equals(). Et il se trouve que tu as déjà fait une méthode equals() dans Book, donc voilà tu as tout ce qu'il faut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(b1.equals(b3));
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Redéfinir la méthode init
    Par aymen007 dans le forum Struts 1
    Réponses: 1
    Dernier message: 10/07/2007, 13h11
  2. [JButton]Redéfinir la méthode paint(), colorer le fond.
    Par leminipouce dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/01/2006, 15h51
  3. [POO] Redéfinir une méthode en se servant de l'ancien code
    Par bart64 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 31/05/2005, 13h59
  4. [ArrayList] indexOf()
    Par phoebe dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 08/11/2004, 17h52
  5. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10

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