une - tableau d'objet java



Utiliser une HashMap comme clé pour une autre HashMap (1)

J'ai une exigence où je dois mapper un ensemble de configurations avec un ensemble de valeurs, idéalement dénoté par une structure Map<Map<String, Object>, Map<String, Object>> .

Les deux configurations et la partie des valeurs de la carte principale sont arbitraires et par conséquent, je suis incapable d'utiliser une classe concrète.

S'il vous plaît fournir des commentaires sur cette structure. Peut-on utiliser une carte comme clé pour une autre carte? En faisant un peu de recherche, j'ai été en mesure d'établir que la méthode Equals de la carte utilise toutes les clés et valeurs sous-jacentes pour considérer deux cartes comme égales. En outre, le HashCode d'une carte est basé sur les Hashcodes des clés de la carte. Cet OMI devrait suffire aux exigences minimales d'utilisation d'une carte comme clé.

J'aimerais toujours que quelqu'un valide cela avant d'aller de l'avant avec la mise en œuvre. Dans le cas où il existe une meilleure solution / conception que quelqu'un peut suggérer, n'hésitez pas à le faire.

MODIFIER

J'ai fini par utiliser un simple tilde ('~') & pipe ('|') séparé en tant que clé et déconstruite quand nécessaire. Merci à tous ceux qui ont aidé.


Oui, un HashMap peut être utilisé comme une clé pour une autre carte, car la classe remplace correctement .equals() et .hashCode() .

Cependant, c'est généralement une mauvaise idée d'utiliser des types mutables (tels que HashMap ) en tant que clés de Map ou éléments de Set , car vous violez les invariants que ces classes attendent si les objets sont mutés alors qu'ils sont dans la collection.

Bien que pas tout à fait ce que vous cherchez, Guava offre plusieurs structures de données supplémentaires telles que Multiset , MultiMap , BiMap , Table qui peuvent être utiles. Ils offrent également des collections immuables telles que ImmutableMap qui (parce qu'ils ne peuvent pas être mutés) sont plus sûrs à utiliser comme une clé de Map . Ce qui ne veut pas dire que vous devriez le faire, simplement que c'est sûr (si les clés et les valeurs sont également immuables).

Pensez à poster une question explorant le problème qui vous a amené à conclure une Map<Map<K, V>, Map<K, V>> structure Map<Map<K, V>, Map<K, V>> était ce dont vous aviez besoin. Vous pouvez obtenir de meilleures réponses à cette question.





hashmap