【发布时间】:2015-05-22 12:11:37
【问题描述】:
我正在实现一个队列类,其中的元素(使用 ArrayList 实现)应该是可更新的,并且我有一个 HashMap 实例变量来跟踪它们的索引,因此该函数不必遍历数组查找为要替换的对象。
我正在尝试这样做:
public void update(T oldElement, T newElement) {
int index = map.get(oldElement);
map.put(newElement, index);
elements.set(index, newElement);
}
参数 oldElement 是对一个对象的引用,该对象肯定等于要替换的元素,但我意识到它们仍然是单独的对象,并且在我的 HashMap 中找不到 oldElement,因为它不是那里有一把钥匙。我真的想不出任何关于这个的想法,任何帮助都将不胜感激。
HashMap 如下所示:
private HashMap<T, Integer> map = new HashMap<T, Integer>();
编辑:方法更新由类外的代码调用。
已解决
这是由于我的 remove() 方法中的一个错误。我没有意识到 HashMap 实际上使用了对象的哈希值。
【问题讨论】:
-
从地图中删除 index/oldElement 并在之后添加 index/newElement 有什么问题?
-
您需要插入/删除方法,这些方法还会更新您的地图以使其与您的数组保持一致。
-
当你说“一定要相等”时,你真的实现了自己的equals和hashCode方法吗?
-
史蒂夫:我有。大家:是 remove() 方法中的一个错误导致了错误,我只是认为这是因为它们是不同的对象。我没有意识到 HashMap 在比较时实际上使用了对象的哈希值。 :/我需要睡觉。感谢您的宝贵时间!