欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ArrayList、Vector、HashSet、HashMap、HashTable的初始大小、加载因子、扩容倍数、底层数据结构

程序员文章站 2022-04-16 09:16:10
Class初始大小加载因子扩容倍数底层数据结构Code是否线程安全同步方式ArrayList1011.5倍数组int newCapacity = oldCapacity + (oldCapaci......

Class

初始大小

加载因子

扩容倍数

底层数据结构

Code

是否线程安全

同步方式

ArrayList

10

1

1.5倍

数组

int newCapacity = oldCapacity + (oldCapacity >> 1);
">>"右移符号,10右位移1位得5
Arrays.copyOf 调用 System.arraycopy 扩充数组

线程不安全

-

Vector

10

1

2倍

数组

int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
capacityIncrement默认为0,所以是加上本身,也就是2*oldCapacity,2倍大小
Arrays.copyOf 调用 System.arraycopy 扩充数组

线程安全

synchronized

HashSet

16

0.75

2倍

Hash散列表

add方法实际调用HashMap的方法put

线程不安全

-

HashMap

16

0.75

2倍

Hash散列表

void addEntry(int hash, K key, V value, int bucketIndex) {
    if ((size >= threshold) && (null != table[bucketIndex])) {
        resize(2 * table.length);
        hash = (null != key) ? hash(key) : 0;
        bucketIndex = indexFor(hash, table.length);
    }

    createEntry(hash, key, value, bucketIndex);
}

线程不安全

-

Hashtable

11

0.75

2倍+1

Hash散列表

int newCapacity = (oldCapacity << 1) + 1;
if (newCapacity - MAX_ARRAY_SIZE > 0) {
    if (oldCapacity == MAX_ARRAY_SIZE)
        return;
    newCapacity = MAX_ARRAY_SIZE;
}

线程安全

synchronized

本文地址:https://blog.csdn.net/weixin_44900158/article/details/109560738

相关标签: java基础 java