HashMap源码-containsKey方法

环境:jdk1.8
containsKey方法源码如下:

//传入参数:key值 public boolean containsKey(Object key) { //调用核心方法getNode,判断是否存在对应节点 return getNode(hash(key), key) != null; }

getNode方法源码如下:
//传入参数:1.根据key散列计算得到的哈希值 2.key值 final Node getNode(int hash, Object key) { Node[] tab; Node first, e; int n; K k; //判断表是否为空,判断key对应的链表节点是否存在 if ((tab = table) != null && (n = tab.length) > 0&&(first = tab[(n - 1) & hash]) != null) { //判断链表的头部元素是否是key值对应的真实value,对比项:1.hash 2.key值 if (first.hash == hash && ((k = first.key) == key || (key != null && key.equals(k)))) return first; if ((e = first.next) != null) { //判断是否是红黑树 if (first instanceof TreeNode) //走红黑树逻辑,从红黑树中获取对应的value return ((TreeNode)first).getTreeNode(hash, key); //遍历链表 do { //判断链表下个元素是否是key值对应的真实value,对比项:1.hash 2.key值 if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } while ((e = e.next) != null); } } //没有找到对应节点则返回null return null; }


【HashMap源码-containsKey方法】
总结: 1.HashMap的containsKey方法,内部实际还是根据key去找对应节点,和get方法类似

    推荐阅读