第18天 map

Map

Map接口中存储的是key(键)和value(值),由键值对组成的。每一个键都不重复。值是可以重复的。
key-value称之为键值对
将每一个键值对看作一个对象,抽取出一个代表键值对的类,叫做Map.Entry

//创建一个映射
Map<String,String> map = new Hashmap<>();
//添加数据
map.put("温人豪"(key),"是谁"(value));
//根据key获取value,获取key值不存在返回null
sout(map.get("温人豪"))
//根据key移除元素
map.remove("温人豪")
//判断key是否存在
map.containKey("温人豪")
//判断values是否存在
map.containsValue("是谁")
//清空map
map.clear();
//获取元素个数
map.size();
//获取所有的value
Collection<String> values = map.values();
//获取所有的key
1) Set<String> strings = map.keySet();
2) for (String key : strings){
		sout(key);//获取键
		sout(map.get(key));//获取值
		}

// 获取所有键值对
1)Set<Map.Entry<String,String>> entries = map.entrySet();
  sout(entries)
2) for (Map.Entry<String,String> entry : entries){
		sout(entry);
		sout(entry.getKey());
		sout(entry.getValue());
		}

HashMap

  1. key和value 允许 null
  2. 是线程不安全的映射
  3. 输出的内容是无序的,位置可能发生改变
  4. 当第一次put元素时,会创建一个长度为16的Node类型的数组,默认的阈值是12,默认的初始容量是16,默认的加载因子是0.75
  5. 初始化容量是2的n次方的形式
  6. 底层是数组+链表+红黑树
  7. 默认扩容是容量翻一倍
HashMap() : 创建一个空的HashMap
HashMap(int initialCapacity) : 指定初始容量,初始容量一定是2的n次方的形式
HashMap(int initialcapacity,float loadFactor) : 使用指定的初始容量和加载因子构造一个空HashMap

源码总结:

  1. 如果链表长度大于8,数组长度小于64,会进行一次扩容。数组长度翻倍,并且对数据重新进行高低位分配
  2. HashMap初始化容量永远都是2的n次方格式
  3. 扩容时是容量范围,如果原来的桶上是链表,那么扩容后要么放在原来的索引处,要么是原来索引位置+原来的数组长度处
  4. 当扩容时,如果桶上是一个红黑树,经过运算长度小于等于6,会变成链表

hash碰撞的情况

  1. key的值相同,key的hash一样,把新的值替换为旧的值
  hashMap.put("1",1000);
  hashMap.put("1",2000);
  1. key值不同,hash值相同。两个不同的key会被映射到哈希表的同一个位置,也就是同一个“桶”中
hashMap("Ma",3000)
hashMap("NB",4000)
  1. key值不同,hash值不同。(n-1)&hash后的值相同。这两个不同的key会被放置在同一个桶中的链表或红黑树上
hashMap.put("a",5000);
hashMap.put("b",5000);
hashMap.put("c",5000);
hashMap.put("d",5000);
hashMap.put("e",5000);
hashMap.put("aerg",5000);
hashMap.put("agr",5000);
hashMap.put("aeweg",5000);
hashMap.put("aarg",5000);

Hashtable

  1. Hashtable的key和value不能是null,线程是安全的
  2. 默认初始容量是11,默认加载因子是0.75
  3. 指定的初始化容量指定多少就是多少
  4. 默认扩容是先扩大一倍再加1

相关推荐

  1. 18 map

    2024-04-30 06:54:04       27 阅读
  2. 18 File类

    2024-04-30 06:54:04       35 阅读
  3. 代码随想录7 454 、 383 、1518

    2024-04-30 06:54:04       27 阅读
  4. 50精通Golang(12

    2024-04-30 06:54:04       42 阅读
  5. 50精通Golang(11

    2024-04-30 06:54:04       43 阅读
  6. 50精通Golang(14

    2024-04-30 06:54:04       51 阅读
  7. 50精通Golang(15

    2024-04-30 06:54:04       46 阅读
  8. 50精通Golang(16

    2024-04-30 06:54:04       63 阅读
  9. 12 static final

    2024-04-30 06:54:04       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 06:54:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 06:54:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 06:54:04       82 阅读
  4. Python语言-面向对象

    2024-04-30 06:54:04       91 阅读

热门阅读

  1. Objective-C学习计划

    2024-04-30 06:54:04       30 阅读
  2. 数据集市与数据仓库

    2024-04-30 06:54:04       35 阅读
  3. LeeCode 3130 DP / 组合数学

    2024-04-30 06:54:04       32 阅读
  4. 深度学习发展背后的人和事

    2024-04-30 06:54:04       36 阅读