Map-Resize | 学习笔记

简介: 快速学习 Map-Resize。

开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:Map-Resize 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/489


Map-Resize


内容介绍

一、 Map-Resize


一、 Map-Resize

HishMap 需要 resize 时扩容因子是如何得到的?

如果要想解决这个问题还是需要去进行源代码的深入研究,也就是说对于基本的数据结构(类集)。

在进行数据添加的时候这个里面存在有一个 put() 方法。

public V put(K key,V value) {

return putVal(hash(key),key,value,false,true);

}

put() 方法里面可以发现有一个 putVal() 方法,而且可以发现这个方法首先进行了hash 计算(查找),而后在这个方法的实现定义。

if(oldCap>0) {

if(oldCap>=MAXIMUM_CAPACITY) { //是否大于了最大的容量

threshold=Integer.MAX_VALUE; //将其设置为整型最大

return oldTab;

} //如果没有超过容量

else if((newCap=oldCap<<1)

oldCap>=DEFAULT_INITIAL_CAPACITY)

newThr=oldThr<<1; // double threshold

}

else if(oldThr>0) // initial capacity was placed in threshold

newCap=oldThr;

else { // zero initial threshold signifies using defaults

newCap=DEFAULT_INITIAL_CAPACITY;

newThr=(int)(DEFAULT_LOAD_FACTOR*DEFAULT_INITIAL_CAPACITY);

}

它的容量扩充指的是一开始放30个,如果发现不够了,则进行移位处理,30*2,那么再一次扩充30*2*2。

            </div>
相关文章
|
1月前
|
存储 算法 C++
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
121 1
|
10小时前
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
5 0
|
5天前
|
Java API
Map.entry用法详解
Map.entry用法详解
|
5天前
遍历Map的四种方法之map.entry详解
遍历Map的四种方法之map.entry详解
|
7月前
|
存储 Cloud Native Linux
C++ vector中reserve和resize区别
C++ vector中reserve和resize区别
如何使用Stream流将List转换为Map
如何使用Stream流将List转换为Map
|
1月前
|
分布式计算 JavaScript 前端开发
Stream学习笔记(二)map与reduce
Stream学习笔记(二)map与reduce
|
1月前
|
存储 编译器 C++
C++【set 和 map 学习及使用】
C++【set 和 map 学习及使用】
49 0
C++【set 和 map 学习及使用】
|
Java 容器
使用Iterator遍历map以及list用法
使用Iterator遍历map以及list用法
148 0
使用Iterator遍历map以及list用法
|
Scala
Scala常规操作之数组、List、Tuple、Set、Map
Scala常规操作之数组、List、Tuple、Set、Map
159 0