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...

winform 构造方法顺序源码

  • 2009年11月26日 14:07
  • 5KB
  • 下载

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

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

JavaSE系列:从源码和API分析StringBuffer(概述、构造方法)

下面我们将从概述、构造方法···几个方面简单介绍StringBuffer: 概述,提到StringBuffer,下意识的蹦出两点, 1.我们如果通过String对字符串进行拼接操作,每次拼接,都会构建...

黑马程序员——java基础——ServerSocket、Socket构造方法解析

ServerSocket、Socket构造方法解析

面向对象基础——构造方法与匿名对象

什么是构造方法?   只要有一个对象实例化则就会调用构造方法。 在构造方法中要注意以下几点: —构造方法的名称必须与类名一致 —构造方法的声明处不能有任何返回值类型的声明 —不能在...

黑马程序员——【OC】构造方法概述

------- android培训、java培训、IOS培训期待与您交流! ---------- OC中的构造方法: 1.首先举个例子来说明:通常情况下我们创建一个对象我们会用到语句,这里我们创...
  • ioslz
  • ioslz
  • 2015年03月20日 17:46
  • 196

黑马程序员——OC基础---构造方法

黑马程序员——OC基础---构造方法 ------- android培训、java培训、期待与您交流! ----------...

JAVA——(2)OOP面向对象、封装、继承、多态、this、构造方法

OOP JAVA是一种面向对象的语言,面向对象三大特性就是封装,继承,多态。 一、类和对象 1、OOP:Object Oriented Programming(面向对象编程): 2、类:具有一定特征的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HashMap源码解析——构造方法
举报原因:
原因补充:

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