HashMap源码解析——构造方法

原创 2017年07月22日 22:53:42

上篇博文列取了HashMap的关键属性,本篇主要看构造方法

HashMap的几个构造方法:
补充下

//加载因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//容量
static final int MAXIMUM_CAPACITY = 1 << 30;
static final int MIN_TREEIFY_CAPACITY = 64;

public HashMap() {
        this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
    }

public HashMap(int initialCapacity) {
        this(initialCapacity, DEFAULT_LOAD_FACTOR);
    }

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;
        this.threshold = tableSizeFor(initialCapacity);
    }

public HashMap(Map<? extends K, ? extends V> m) {
        this.loadFactor = DEFAULT_LOAD_FACTOR;
        putMapEntries(m, false);
    }

我们可以看到在构造HashMap的时候如果我们指定了加载因子和初始容量的话就调用第一个构造方法,否则的话就是用默认的。默认初始容量为16,默认加载因子为0.75。

下面我们再看下构造方法中调用的tableSizeFor(initialCapacity);方法

    /**
     * Returns a power of two size for the given target capacity.
     */
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }
版权声明:本文为博主原创,转载请注明出处(http://blog.csdn.net/jdjh1024).

相关文章推荐

StringBuffer和StringBuilder源码解析(一)--构造方法

public final classStringBuffer(StringBuilder) extends AbstractStringBuilder implementsjava.io.Serial...

#Android源码#View的构造方法为什么要4个?

问题描述在View中发现有四个构造方法(5.0下是三个),如下,有什么玄妙吗?//C1 public View(Context context) { .... } //C2 public Vi...

黑马程序员——ios基础---Objective-C:构造方法、@property、MRC

一、@property等 1、点语法:对象名.成员变量名 (点语法不是访问成员变量,而是方法的调用)            它是一个编译器特性    点语法作用:可以替换传统的get和s...

黑马程序员——OC核心语法2之构造方法

0.概念     定义:用来初始化对象的方法,是个对象方法。 - 开头   目的:为了让对象创建出来,成员变量就拥有固定值(默认是空,0)   注意点:(1)先调用父类的构造方法(eg:[sup...

Swift2.0——构造方法的使用

构造方法的使用 import Foundation /* 继承与构造方法: 指定构造与便利构造方法 */ class Person { var name:String var a...

【小白的java成长系列】——构造方法私有化(单例设计)

有了解过spring框架的童鞋们就知道,spring的bean默认是什么形式呀?———单例形式的。 问:那什么叫做单例?单例其实就是Singleton,顾名思义就是只有单个的实例对象操作。 那为什么要...

JAVA_SE基础——32.this关键字调用本类的构造方法

黑马入学blog... 也算是学习笔记。 下面我们来看段代码:

黑马程序员——OC语言------id和构造方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- id   一、什么是id id  == NSObject * 万能指针,能指向\操作任何OC对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)