【发布时间】:2014-03-05 20:17:51
【问题描述】:
我正在尝试为修改 put 函数的 HashMap 创建一个扩展。目标是让 put 函数不允许重复值。因此,如果有人在键/值 (A,a) 已经在映射中时尝试插入键/值 (B,a),那么它将用 (B,a) 替换键/值 (A,a) ) 而不是创建一个新的键/值对。
我遇到的问题是我不知道如何在不迭代表的情况下找到与值对应的键(我不能这样做,因为表是私有变量并且我无法访问它从我的功能扩展中)。
我还尝试使用 keySet() 检索键集,目的是在每个键上运行 get() 操作,但是 set 变量真的让我感到困惑,我不确定如何正确迭代和对单个元素运行 get() 操作。
编辑: 这是我到目前为止所拥有的: 导入 java.util.*;
公共类 UniqueHashMap 扩展 HashMap {
public V put(K key, V value) {
boolean contains = containsValue(value);
if (contains == true)
// INSERT CODE HERE
else
return super.put(key, value);
}
}
在 if 语句中,我想做的是能够: 1)找到“value”对应的key。 2) 删除密钥。 3) 插入新的键/值对。
我遇到问题的部分是 1)因为我见过的大多数解决方案都需要访问地图(我不知道如何获得,因为它是 HashMap 中的私有变量)。我可以使用 keySet() 访问键,但我不知道如何在各个键上迭代地运行 get() 操作,因为我对 set 变量感到困惑。
【问题讨论】:
-
你为什么不简单地交换键和值?似乎是在重新发明轮子。
-
您似乎错误地使用了 HashMap。键应该是表示值的唯一限定符。我同意@Smutje - 听起来你的价值实际上就是你的关键。
-
我不想交换键和值。我希望键和值都是唯一的。