- clear()方法:
方法用于清空整个哈希表
public void clear() {
Node<K,V>[] tab;
modCount++;
if ((tab = table) != null && size > 0) { // 判断哈希表是否为空
size = 0;
for (int i = 0; i < tab.length; ++i) // 遍历所有节点,并置空
tab[i] = null;
}
} - containsValue()方法:
哈希表是否存在value
public boolean containsValue(Object value) {
Node<K,V>[] tab; V v;
if ((tab = table) != null && size > 0) { // 如果哈希表为空,直接返回false
for (int i = 0; i < tab.length; ++i) { // 遍历哈希表
for (Node<K,V> e = tab[i]; e != null; e = e.next) { // 遍历链表
if ((v = e.value) == value ||
(value != null && value.equals(v))) // 如果存在相对应的值,返回true
return true;
}
}
}
return false;
} - keySet()方法:
返回哈希表所有key,返回值保存在Set<K>中
public Set<K> keySet() {
Set<K> ks;
// 判断内部成员keySet是否为null,为null则调用新建一个keySet,否则返回已存在的keySet
// keySet成员初始为null,且并没有在构造函数中初始化过
// 所以初次调用keySet()方法时会new KeySet()
return (ks = keySet) == null ? (keySet = new KeySet()) : ks;
} - KeySet内部类:
KeySet继承了AbstractSet<K>,该类的主要作用是获取哈希表的所有key值,
当新建一个KeySet 内部类对象时,并没有调用其他方法,KeySet的父类无参构造函数也没有执行任意代码,
那么KeySet是如何获取key值的?
答案是public final Iterator<K> iterator() { return new KeyIterator(); }
这里使用new KeyIterator()创建了Iterator对象
请收看下集HashMap源码 7 对new KeyIterator()的分析
HashMap源码 6
最新推荐文章于 2021-11-09 15:12:22 发布