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 :

Map avec clé composée


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut Map avec clé composée
    Bonsoir,

    J'ai une classe A avec les attributs b,c,d,e. Les instances de A sont identifiées par le couple d'attributs <b,c>.
    J'aimerais savoir quelle collection utiliser pour stocker des instances d'une classe A comme dans une table de hachage. J'ai vu le type HashMap mais apparemment la clé est composée que d'un seul élément or ici c'est un couple d’éléments.

    Merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    non, la clé réelle d'une hashmap est le résultat de la fonction "hashcode" appliquée sur l'objet. donc, à condition d'override correctement les méthode "hashcode" et "equals" des objets, et aussi si ce couple ne peut pas varier après construction de l'objet, alors il s'agit d'un bon candidat comme clé de hashmap

    Exemple:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    import java.util.HashMap;
    import java.util.Map;
     
    public class Test {
    	static final class Foo {
    		private String a, d, e;
    		private final String b, c;
     
    		public Foo(String b, String c) {
    			this.b = b;
    			this.c = c;
    		}
     
    		@Override
    		public boolean equals(Object obj) {
    			if (this == obj) {
    				return true;
    			}
    			if (obj == null) {
    				return false;
    			}
    			if (getClass() != obj.getClass()) {
    				return false;
    			}
    			Foo other = (Foo) obj;
    			if (b == null) {
    				if (other.b != null) {
    					return false;
    				}
    			} else if (!b.equals(other.b)) {
    				return false;
    			}
    			if (c == null) {
    				if (other.c != null) {
    					return false;
    				}
    			} else if (!c.equals(other.c)) {
    				return false;
    			}
    			return true;
    		}
     
    		public String getA() {
    			return a;
    		}
     
    		public String getD() {
    			return d;
    		}
     
    		public String getE() {
    			return e;
    		}
     
    		@Override
    		public int hashCode() {
    			final int prime = 31;
    			int result = 1;
    			result = prime * result + (b == null ? 0 : b.hashCode());
    			result = prime * result + (c == null ? 0 : c.hashCode());
    			return result;
    		}
     
    		public void setA(String a) {
    			this.a = a;
    		}
     
    		public void setD(String d) {
    			this.d = d;
    		}
     
    		public void setE(String e) {
    			this.e = e;
    		}
    	}
     
    	public static void main(String[] args) {
    		Map<Foo, Object> map = new HashMap<Foo, Object>();
     
    		Foo f1 = new Foo("foo1", "foo1");
    		map.put(f1, "blabla");
    		Foo f2 = new Foo("foo2", "foo2");
    		map.put(f2, "blabla");
    		Foo f3 = new Foo("foo3", "foo3");
    		map.put(f3, "blabla");
    		Foo f4 = new Foo("foo4", "foo4");
    		map.put(f4, "blabla");
     
    		System.out.println(map.containsKey(new Foo("foo1", "foo1"))); // print true
    	}
     
    }

Discussions similaires

  1. Problème de mapping avec clés composées
    Par goeland444 dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/04/2008, 19h57
  2. E-mail de l'expéditeur avec le composant serveur Outlook
    Par DavFau dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 19/01/2008, 10h09
  3. Réponses: 1
    Dernier message: 04/12/2007, 16h36
  4. [hibernate] Mapping avec identifiant composé
    Par miky_jo dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/10/2005, 16h48
  5. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58

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