在文档中,HashMap或Hashtable的返回类型是值本身如下,
public V put(K key, V value)
并且,它告诉返回类型是与key关联的先前值,如果没有key的映射,则返回null。 (null返回也可以指示映射先前将null与key关联。)
比如说,如果我按照以下方式编写Hashtable,
Hashtable<Integer, Character> hash = new Hashtable<Integer, Character>();
System.out.println(hash.put(12, 'c'));
现在,上面的代码返回null
。我正在实现一个Hashtable,我有点困惑何时返回null或V,其中V将是与key关联的先前值。我的代码如下,
// for dealing w/ the table data
class HashEntry<K, V> {
private final 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;
}
public void setValue(V value) {
this.value = value;
}
}
class MyHashTable <K, V> {
private int size;
private int DEFAULT_CAPACITY = 16;
private HashEntry<K, V>[] values = new HashEntry[DEFAULT_CAPACITY];
public V put(K key, V value) {
boolean insert = true;
for (int i = 0; i < size; i++) {
if (values[i].getKey().equals(key)) {
values[i].setValue(value);
insert = false;
}
}
if (insert) {
// method for check or increase capacity
increaseCapacity();
values[size++] = new HashEntry<K, V>(key, value);
}
return null;
// return value;
}
我应该在实现中何时返回null或value(类型V)?
答案 0 :(得分:3)
在您的示例中,这是您第一次为键12分配值,因此返回文档中所述的null,因为没有为该键存储以前的值。
如果你那么:
System.out.println(hash.put(12, 'd'));
&#39; C&#39;将被打印,因为它将作为键12的先前值返回。
根据相关其他信息进行修改:
以下是put方法的可能实现,可以正确返回上一个值。
public V put(K key, V value) {
boolean insert = true;
V prevValue = null;
for (int i = 0; i < size; i++) {
if (values[i].getKey().equals(key)) {
prevValue = values[i].getValue();
values[i].setValue(value);
insert = false;
}
}
if (insert) {
// method for check or increase capacity
increaseCapacity();
values[size++] = new HashEntry<K, V>(key, value);
}
return prevValue;
}