用VB.net编写的Windows服务管理程序(堪称经典)全部源代码

用VB.net编写的Windows服务管理程序(堪称经典)全部源代码,提供了全部的服务功能,绝对值得下载。

文件:590m.com/f/25127180-498774168-58a1db(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

想要理解HashMap底层数据的存储形式,底层原理,最好的形式就是读它的源码,但是说实话,源码的注释说明全是英文,英文不是非常好的朋友读起来真的非常吃力,我基本上看了差不多七八遍,还结合网上的一些解析,才觉得自己有点理解。

​ 我先画了一个图,HashMap数据存储的结构图,先有个理解,再来看看下面的代码解析可能会好理解些。

HashMap的数据结构

image-20210403232719038

HashMap静态属性

/**
 * The default initial capacity - MUST be a power of two.
 * 默认的数组容量16
 */
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

/**
 * 最大的容量
 */
static final int MAXIMUM_CAPACITY = 1 << 30;

/**
 * The load factor used when none specified in constructor.
 * 负载因子,用于扩容,当数组的容量大于等于 0.75*DEFAULT_INITIAL_CAPACITY时,就要扩容
 */
static final float DEFAULT_LOAD_FACTOR = 0.75f;

/**
 * 每个桶中数据结构转变为树的链表长度界限,当链表长度为为8时,转成红黑树
 */
static final int TREEIFY_THRESHOLD = 8;

/**
 * 当树的结点等于小于等于6时,又转会链表
 */
static final int UNTREEIFY_THRESHOLD = 6;

static final int MIN_TREEIFY_CAPACITY = 64;

存储的对象

/**
 * Basic hash bin node, used for most entries.  (See below for
 * TreeNode subclass, and in LinkedHashMap for its Entry subclass.)
 */
static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;

    Node(int hash, K key, V value, Node<K,V> next) {
        this.hash = hash;
        this.key = key;
        this.value = value;
        this.next = next;
    }

    ……省略
}
上一篇:web笔记


下一篇:Spring 5.0.3.RELEASE中的 Kotlin 语言等支持