2012-02-15 2 views
1

J'ai trébuché sur le problème avec TObjectDoubleHashMap de trove. La version 2.0.2 ne remplace pas la méthode hashCode. Les versions plus récentes de trove (3.0.0) incluent le hashCode.Les cartes de hachage de Trove n'implémentent pas hashCode

Notez que la méthode equals est remplacée dans les deux versions.

Pourquoi la méthode hashCode n'a pas été remplacée dans la version 2? Peut-être que le contrat pour la dérogation hashCode/equals a été introduit après que les cartes de la mine aient été écrites à l'origine? Ou est-ce simplement une violation du contrat et un bug qui a été corrigé plus tard? Je serais très surpris si c'est un bug et non une caractéristique, car comment se fait la classe qui traite surtout de hashing pas l'emporter sur hashCode quand il a equals

Répondre

1

Peut-être que le contrat pour des raisons impérieuses hashCode/equals a été introduite après la cartes de trove ont été écrites à l'origine?

Non. C'était présent depuis longtemps. Je crois au moins dès 1.1, mais je ne peux rien trouver plus tôt que 1.3 docs.

Ou est-ce simplement une violation du contrat et un bogue?

Oui. C'est une violation du contrat. Notez que java.util.Map a son propre contrat d'égalité/hashCode supplémentaire au-delà de java.lang.Object, qui est sciemment violé par IdentityHashMap et quelques autres.

De l'javadoc:

public boolean equals(Object o) 

Compares l'objet spécifié avec cette carte pour l'égalité. Renvoie true si l'objet donné est également une carte et que les deux Map représentent les mêmes mappages. Plus formellement, deux cartes t1 et t2 représentent les mêmes mappings si t1.entrySet().equals(t2.entrySet()). Cela garantit que la méthode equals fonctionne correctement sur les différentes implémentations de l'interface Map.

Questions connexes