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

相关文章
|
8月前
|
Java
使用JavaStream将List转为Map
使用JavaStream将List转为Map
|
1月前
|
存储 JavaScript 前端开发
set和map的区别
set和map的区别
66 4
|
6月前
|
存储 Cloud Native Linux
C++ vector中reserve和resize区别
C++ vector中reserve和resize区别
|
5月前
|
存储 编译器 C++
C++【set 和 map 学习及使用】
C++【set 和 map 学习及使用】
45 0
C++【set 和 map 学习及使用】
|
6月前
|
JSON 数据库 数据格式
Map和List的碰撞
Map和List的碰撞
29 0
|
10月前
|
存储 自然语言处理
Ananagrams(map+vector)
Ananagrams(map+vector)
71 0
|
10月前
List,Map 三种遍历方式:(总结理解)
List,Map 三种遍历方式:(总结理解)
43 0
|
11月前
|
算法 C++ Python
C++中map的用法
⭐一、map的简介 map是C++STL中的一个关联式容器,它提供一对一的hash,它类似于Python中的字典,也有着键值对(Key-Value)这一说。我们可以通过键(Key)来找到值(Value),但需要注意的是,每个键(Key)只能在map中出现一次哦! map可以储存多种类型的数据,它主要用于一对一映射的情况,map内部的实现是通过自建一颗红黑树,这颗树可以对数据进行自动排序。所以在map内部所有的数据都是有序的,这个功能以后可以方便我们解决很多问题。
270 0
|
存储 自然语言处理 Go
C++进阶 map和set
C++进阶 map和set
101 0
C++进阶 map和set
|
Java 开发者
Map-Resize | 学习笔记
快速学习 Map-Resize。