HashMap

发布时间 2023-07-12 00:52:54作者: King-DA

HashMap

hashmap会将key和value生成一个entry对象。
将entry放在数组中。放的位置,将key进行hashcode后取余,获取数组下标。
链表:头插法、尾插法。头插法更快。

1.7创建HashMap的底层源码

  • 1.创建HashMap
HashMap map = new HashMap();
  • 2.查看底层调用方法
  /**
     * Constructs an empty <tt>HashMap</tt> with the default initial capacity
     * (16) and the default load factor (0.75).
     * 生成一个长度为16的数组,扩容因子是0.75
     */
    public HashMap() {
        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
    }
  • 3.this方法调用.
    该方法中,只做参数验证和数据赋值,init方法是没有用的。
  /**
     * Constructs an empty <tt>HashMap</tt> with the specified initial
     * capacity and load factor.
     *
     * @param  initialCapacity the initial capacity
     * @param  loadFactor      the load factor
     * @throws IllegalArgumentException if the initial capacity is negative
     *         or the load factor is nonpositive
     */
    public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);

        this.loadFactor = loadFactor;
        threshold = initialCapacity;
        init();
    }