首页 > 其他分享 >Collection - Map & List & Set

Collection - Map & List & Set

时间:2022-11-08 07:11:43浏览次数:37  
标签:扩容 Map Set HashMap 阈值 int List 链表 size

1.7-hashtable = 数组 + 链表

(>=) 1.8 = 数组 + 链表 + 红黑树

HashMap 的容量 -》 数组的大小

new HashMap(): 如果不写构造参数,默认大小是16,

如果说写了初始容量:11,hashmap的初始容量就是11?

Hash冲突解决方式:

1.7 头插法

HashMap并不是用取模计算index,而是用位运算!

效率:位运算 > %

并没有说HashMap的容量一定是16,

/** The default initial capacity - MUST be a power of two. */ 必须是2的指数幂?

roundUpToPowerOf2(size);   // 强行将非2的指数次幂的数值转化成2的指数次幂

怎么转化?

1. 必须最接近size,11

2. 必须大于等于size 

3. 必须是2的指数次幂

为什么一定要转成2的指数次幂?

计算索引:int i = indexOf(hash, table.length);

static int indexFor(int h, int length) {

  return h & (table.lenght - 1);

}

HashMap扩容

当前HashMap存了多少Element,size >= threshold,threshold为扩容阈值

threshold扩容阈值 = capacity * 加载因子。

扩容怎么扩?

扩容为原来的2倍,

转移数据,

 

重要成员变量

DEFAULT_INITIAL_CAPACITY = 1<<4; Hash表默认初始容量

MAXIMUM_CAPACITY= 1<<30; 最大Hash表容量

DEFAULT_LOAD_FACTOR=0.75f; 默认加载因子

TREEIFY_THRESHOLD=8; 链表转红黑树阈值

UNTREEIFY_THRESHOLD=6; 红黑树转链表阈值

MIN_TREEIFY_CAPACITY=64; 链表转红黑树时hash表最小容量阈值,达不到优先扩容。

End!

标签:扩容,Map,Set,HashMap,阈值,int,List,链表,size
From: https://www.cnblogs.com/zhf123/p/16868071.html

相关文章

  • 纯手写实现concurrenthashmap&原理分析
    ConcurrentHashMap原理HashTable与HashMap的区别HashMap线程不安全HashTable线程安全HashTable集合有哪些缺陷加了synchronized,多线程操作效率低![](/Users/......
  • #yyds干货盘点#都在说sourceMap,今天来聊聊
    SourceMap想必大家都不陌生。线上的代码多是压缩后的,如果线上有报错却只能调试那个代码多半是个噩梦。因此我们需要有一个桥梁帮助我们搭建起源代码及压缩后代码的联系,sour......
  • 上电时序 reset
    上电时序  resetZ:\AGN_H231UO_M119_62S\alps\kernel-4.19\drivers\misc\mediatek\imgsensor\src\mt6765\camera_project\AGN_H231UO_M119_62S\camera_hw\imgsensor_cfg......
  • java 通过map统计输入字符的个数
    packagecom.tedu.study01;importjava.util.*;publicclassTestMap{publicstaticvoidmain(String[]args){System.out.println("输入需要统计的......
  • java 中的map
    map初始容量是16packagecom.tedu.study01;importjava.util.HashMap;importjava.util.Map;publicclassstudy_Map{publicstaticvoidmain(String[]args)......
  • vscodeSnippetSetting
    设定vscode用户代码段这本来挺简单的,左下角设置-用户代码段配置在选项中可以选择类型专属或者全局代码段.今天遇到的问题是配置Markdown代码段之后,没有效果,但测试其他......
  • SetupDiCallClassInstaller处理流程
      MS将于今年10月推出win10RS3RTM版,并要求OEM厂商的驱动程序必须支持新的D/C/H/U驱动框架(微软爸爸一声令下,苦了我们)。其中的"C"项要求过滤驱动的inf文件必须以扩展I......
  • Springboot中使用GSON报错 An attempt was made to call the method com.google.gso
    错误如下: Description:Anattemptwasmadetocallthemethodcom.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;butitdoesnotexist.Itscl......
  • Different lower_case_table_names settings for server (‘1‘) and data dictionary
    ubuntu18.04mysql8.0 ubuntu18.04下/etc/mysql/ mysql.cnf 里面加上了这么一段:[mysqld]lower_case_table_names=1#protocol=tcp为的是解决大小写敏感的问题,可是重启m......
  • 07-Go语言Map和String
    Map初始化 varmap1map[int]string varmap2=make(map[int]string) varmap3=map[int]string{1:"倒霉",2:"打针"} fmt.Println(map1) fmt.Println(map2==n......