Java的HashMap总结

2017-05-26  本文已影响0人  w黄杨w

数据结构

初始化

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
private void inflateTable(int toSize) {
    // Find a power of 2 >= toSize
    int capacity = roundUpToPowerOf2(toSize);
    ...
    table = new Entry[capacity];
    ...

注:HashMap 的散列数组大小一定是2的幂,如果 new 的时候指定了容量且不是2的幂,实际容量会是最接近(大于)指定容量的2的幂。

 public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        ...

扩容

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

哈希算法

非并发安全问题

上一篇 下一篇

猜你喜欢

热点阅读