Iterator<Entry<K,V>> i = entrySet().iterator();
Entry<K,V> correctEntry = null;
if (key==null) {
while (correctEntry==null && i.hasNext()) {
Entry<K,V> e = i.next();
if (e.getKey()==null)
correctEntry = e;
}
} else {
while (correctEntry==null && i.hasNext()) {
Entry<K,V> e = i.next();
if (key.equals(e.getKey()))
correctEntry = e;
}
}
V oldValue = null;
if (correctEntry !=null) {
oldValue = correctEntry.getValue();
i.remove();
}
return oldValue;
}
这个是删除的方法。
一样是先获取键值对的迭代器。
然后创建一个键值对变量correctEntry,
然后判断参数是否为空,如果为空就遍历键值对集合,遍历的条件就是correctEntry一定为空才可以遍历,如果键值对中有一个键为空,那么将该键值对赋给correctEntry。
如果参数不为空,就遍历键值对集合,遍历的条件就是correctEntry一定为空才可以遍历,如果键值对中有一个键和参数equals,那么该键值对赋给correctEntry。
然后创建一个泛型变量 oldValue,初始值为空。
判断如果correctEntry不为空,也就是上面的遍历找到对应的键值对了,将该键值对的值赋给oldValue,然后调用迭代器的删除方法删除该键值对。while循环中的判断条件就是correctEntry为空,如果找到了合适的键值对correctEntry就不为空了,就会跳出while循环,迭代器的迭代下标就会停留在该键值对那里。
最后返回oldValue。
public void putAll(Map<? extends K, ? extends V> m) {
for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
put(e.getKey(), e.getValue());
}
这个方法是将参数map的所有键值对添加到本map中的,其实就是循环遍历调用put方法。
public void clear() {
entrySet().clear();
}
这个方法是清空所有键值对的方法,调用entrySet方法获取键值对集合,然后调用clear方法清除。
transient Set<K> keySet;
transient Collection<V> values;
这两个成员变量分别是键的集合和值的集合,都是transient的不可被序列化。