Vous mettre "Un", de nouvelles "B"
Vous retirer "Une", de nouvelles "B"
Donc, oui, votre hypothèse que cette IdentityHashMap devrait pas supprimer cette valeur semble correct.
Mais vous êtes à l'aide de l' remove(key, value)
méthode à partir de la base de AbstractMap - qui n'est pas surchargée par la présente sous-classe spécifique!
Ainsi, bien que la javadoc dit:
Cette classe implémente l'interface de la Carte avec une table de hachage, à l'aide de la référence de l'égalité en place de l'objet, de l'égalité lorsque l'on compare les touches (et les valeurs).
L' (et les valeurs) de la partie est (probablement) a mis en place uniquement pour l'insertion des paires clé/valeur.
Donc, l'important, vient de nouveau de la javadoc:
Cette classe n'est pas d'un usage général en application de la feuille! Alors que cette classe implémente l'interface de la Carte, intentionnellement, viole la Carte du contrat général, qui exige l'utilisation de la méthode equals lorsque l'on compare les objets. Cette classe est conçue pour être utilisée uniquement dans les rares cas où la référence de l'égalité sémantique sont nécessaires.
Mon (probablement d'opinions) à emporter: cette classe est une chose très spéciale. Il est très clair et l'étroitesse de but. Et vous avez trouvé un exemple où il tombe en morceaux. (de laquelle je ne trouve pas surprenant: lorsque vous "changement" de la sémantique, mais que vous décidez de réutiliser du code existant, il est presque inévitable de courir dans ce genre d'incohérences).
Il pourrait être considéré comme bug; et que l'autre réponse confirme: c'est un bug!