HashMap怎么查找元素的呢?

HashMap的查找就简单很多:

  1. 使用扰动函数,获取新的哈希值:
int hash = (key == null) ? 0 : (key.hashCode()) ^ (key.hashCode() >>> 16);
  1. 计算数组下标,获取节点:

    Node<K, V> node = table[(table.length - 1) & hash];
  2. 如果当前节点的key与目标key匹配,直接返回节点的值:

    if (node != null && (node.key == key || (key != null && key.equals(node.key))))
        return node.value;
  3. 如果当前节点是树节点,则在红黑树中进行查找:

    if (node instanceof TreeNode)
        return ((TreeNode<K, V>) node).getTreeNode(hash, key);
  4. 如果当前节点是链表节点,则在链表中进行遍历查找:

    while (node != null) {
        if (node.key == key || (key != null && key.equals(node.key)))
            return node.value;
        node = node.next;
    }

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题