【发布时间】:2019-09-22 23:43:18
【问题描述】:
我为 HashMap 编写了一个删除方法,但我收到了错误,表明它没有返回正确的值。
说明如下:
如果在地图中找到键,remove(Object) 方法应该删除并返回与给定键关联的值。删除的条目应替换为 REMOVED 属性。如果map不包含key,则此方法无效。
因此,这是我的代码的一部分,它与我的代码相关,所以它不是长代码。
public class HashMap<K,V>
{
private final double MAX_LOAD_FACTOR = 0.75;
private HashEntry[] elementData;
private final HashEntry REMOVED = new HashEntry(null, null);
private int size;
public HashMap()
{
this.elementData = new HashMap.HashEntry[10];
size = 0;
}
public V remove(Object key)
{
int h = hashFunction(key);
while (elementData[h] != elementData[0] && elementData[h] != elementData[h].getKey())
{
h = (h + 1) % elementData.length;
}
if (elementData[h] == elementData[h].getKey())
{
elementData[h] = REMOVED; // "removed" flag value
size--;
return elementData[h].getValue();
}
return elementData[h].getValue();
}
public class HashEntry
{
private K key;
private V value;
public HashEntry(K key, V value)
{
this.key = key;
this.value = value;
}
public K getKey()
{
return key;
}
public V getValue()
{
return value;
}
}
}
我从错误中收到的消息是我的尺寸不正确,而且我返回了错误的值。我能得到这方面的帮助吗?我不知道问题出在哪里。
【问题讨论】:
-
为什么要实现自己的哈希映射而不使用 java 标准的哈希映射?我认为您的错误是比较
elementData[h] == key键与 hashmap 条目不同。但我看到索引有更多问题,你会得到一些 ArrayIndexOutOfBoundException ... -
@fairtrax 实现我自己的哈希映射是什么意思?
-
@fairtrax 我更新了我的代码,但仍然不正确。
-
您仍然不比较键,而是将条目结构与键进行比较。为什么要写代码?只需使用现有的java! docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
标签: java hash hashmap hashset hashcode