|
|
1
9
你 可以 这样做,但在大多数情况下不应该这样做。 映射的键需要是常量,并且需要设置其equals和hashcode以给出正确的行为。如果在将关键点添加到地图中后对其进行修改,则会使地图无效。 HashMap可以修改,因此不应用作键。
要解释为什么更改它是一个问题,您需要了解哈希图是如何工作的。这非常简单,但假设您有
每当您添加
现在,当查找对象时,它会查看
通过使用多于2个的存储桶,可以将每个存储桶中的项目数量减少2、4、8或更多倍,从而减少需要检查的对象数量。 然而,假设您在地图中放置一个对象,它将被添加到B0。然后更改对象,hashCode将更改,因此最后一位现在为1。
如果你愿意
这就是为什么hashCode对于HashMap中用作键的任何对象都必须是常量,否则您可能会“丢失”这些键。 |
|
|
2
1
使用迭代器迭代hashmap值的值 根据您的需求实现这种功能,否则不建议使用。 |
|
|
3
0
不能将Map用作键,但可以将其用作值。 为了进一步解释,由于您可能要向HashMap中添加密钥,因此密钥将不会保持不变,因此不再用作密钥。 |
|
|
4
0
如其他回答中所述,
|
|
|
Giffyguy · 如何限制在构造向量后调用'resize()'? 4 年前 |
|
|
vytaute · 返回表类型时Oracle函数中的类型错误 4 年前 |
|
|
bbgghh · 在scala中连接两个列表时如何处理不匹配的键 4 年前 |
|
|
dev-chicco · Laravel系列寻找常见物品 4 年前 |
|
|
Mitch · Laravel-雄辩的单品合并系列 8 年前 |
|
|
Kieran · 为什么类X可以从集合继承<X> 8 年前 |
|
|
John · 如何在不返回集合本身的情况下返回集合的数据? 8 年前 |
|
|
Niklas Mertsch · 在泛型集合中实现移除(对象o) 8 年前 |