在 Hashmap 中,提供的键的哈希码用于将值放置在哈希表中。在哈希集中,对象哈希码用于将值放置在底层哈希表中。也就是说,hashmap 的优点是你可以灵活地决定你想要什么作为键,这样你就可以做这样的好事。
Map<String,Player> players = new HashMap<String,Player>();
这可以将诸如玩家姓名之类的字符串映射到玩家本身。
我的问题是当键的哈希码发生变化时查找会发生什么。
我希望这对于 Hashmap 来说并不是一个主要问题,因为我不希望也不希望密钥改变。在前面的例子中,如果球员的名字改变了,他就不再是那个球员了。但是,我可以使用键更改其他不是名称的字段来查找玩家,并且将来的查找将起作用。
但是,在 Hashset 中,如果有人稍微更改对象,则使用整个对象的哈希码来放置项目,该对象的未来查找将不再解析到 Hashtable 中的相同位置,因为它依赖于整个对象的哈希码。这是否意味着一旦数据在 Hashset 中就不应更改。还是需要重新散列?还是自动完成等?到底是怎么回事?