zoukankan      html  css  js  c++  java
  • HashMap源码解读(jdk1.8)

    1、相关常量

      默认初始化容量(大小)

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

      最大容量

    static final int MAXIMUM_CAPACITY = 1 << 30;

      默认负载因子:用于扩容的,比如16*0.75=12,当容量达到12时就会扩容。

    static final float DEFAULT_LOAD_FACTOR = 0.75f;

      树化:链表变红黑树,前提是达到最小树化容量。

    static final int TREEIFY_THRESHOLD = 8;

      最小树化容量

    static final int MIN_TREEIFY_CAPACITY = 64;

      反树化:红黑书变链表

    static final int UNTREEIFY_THRESHOLD = 6;

    2、底层数据结构

    数组+链表+红黑树

    3、hash冲突怎么处理?

    源码:

    if (p.hash == hash &&
                    ((k = p.key) == key || (key != null && key.equals(k))))
                    e = p;

    4、链表是尾部插入还是首部?

    源码:

     p.next = newNode(hash, key, value, null);

    5、扩容机制?

    else if ((newCap = oldCap << 1) < MAXIMUM_CAPACITY &&
                         oldCap >= DEFAULT_INITIAL_CAPACITY)
                    newThr = oldThr << 1; // double threshold
  • 相关阅读:
    javascript DOM事件总结
    MySQL索引优化实例说明
    CSV导出大量数据
    最详细的PHP flush()与ob
    XSS攻击(跨站攻击)
    MySQL视图
    MySQL索引
    待整理
    Height、clientHeight、scrollHeight、offsetHeight 、scrollTop、offsetTop
    Cookie和Session的区别
  • 原文地址:https://www.cnblogs.com/xingrui/p/10767632.html
Copyright © 2011-2022 走看看