HashMap

Résolu/Fermé
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 - 14 août 2011 à 21:36
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 14 août 2011 à 22:36
Bonjour,
J'ai besoin d'aide en java,

j'ai deux classe deux classe qui herite de la meme super classe:
class A extends C;
class B extends C;

je veux créer une HashMap qui contient des instance des classe A et B mais je ne sais pas comment faire .
j'ai essayer de faire HashMap liste = new HashMap<C,Cible>; mais ce ne marche pas lorsque je veut ajouter un objet A ou B;

comment je doit faire ?

merci d'avance pour votre aide


1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 14/08/2011 à 22:24
Au niveau de la syntaxe il faut préciser les types des deux côtés :
HashMap<C,Cible> liste = new HashMap<C,Cible>();

Mais lorsque tu récupères un élément avec get(key), l'objet de retour sera du type de key, donc c'est les méthodes hashCode puis equals de l'objet key (donc de A ou de B) qui seront appelées. Il faut que tu les redéfinisse !
La confiance n'exclut pas le contrôle
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
14 août 2011 à 22:36
Exemple de code, j'ai mis des affichages dans equals et hashCode pour bien voir si c'est celles de A, B ou C qui sont appelées...

import java.util.HashMap;

class A extends C
{
    int a;
    
    A(int a,int c)
    {
        super(c);
        this.a=a;
    }

    @Override
    public boolean equals(Object o)
    {
        System.out.println("A.equals");
        if (o instanceof A)
        {
            A a2 = (A) o;
            return a2.a==a && a2.c==c;
        }
        else
            return false;
    }
    
    @Override
    public int hashCode()
    {
        System.out.println("A.hashCode");
        return a;
    }
}

class B extends C
{
    int b;
    
    B(int b,int c)
    {
        super(c);
        this.b=b;
    }

    @Override
    public boolean equals(Object o)
    {
        System.out.println("B.equals");
        if (o instanceof B)
        {
            B b2 = (B) o;
            return b2.b==b && b2.c==c;
        }
        else
            return false;
    }
    
    @Override
    public int hashCode()
    {
        System.out.println("B.hashCode");
        return b;
    }
}

class C
{
    int c;
    
    C(int c)
    {
        this.c=c;
    }
    
    @Override
    public boolean equals(Object o)
    {
        System.out.println("C.equals");
        return ((C) o).c==c;
    }
    
    @Override
    public int hashCode()
    {
        System.out.println("C.hashCode");
        return c;
    }
}

public class D
{
    public static void main(String...args)
    {
        HashMap<C,String> map = new HashMap<C,String>();

        map.put(new A(1,2), "a");
        System.out.println();
        map.put(new B(1,2), "b");
        System.out.println();
        map.put(new C(1), "c");
        System.out.println();
        System.out.println(map.get(new A(1,2)));
        System.out.println();
        System.out.println(map.get(new B(1,2)));
        System.out.println();
        System.out.println(map.get(new C(1)));
    }
}
0