特点
- HashMap是存储key-value形式的集合对象
- HashMap初始容量为16,且容量必须是2的幂。
- HashMap存储的key不能重复,可以存储null为key或者value,也不能重复
- HashMap由数组+链表组成,jdk1.8后链表长度大于8用红黑树增加查询数据
- HashMap是线程不安全的,Hashtable的函数都是同步的,这意味着它是线程安全的。
- 虽然使用Entry组成数组是有序的,当时由于加入了链表和红黑树,所以HashMap是无序的
HashMap的四个构造方法
空参构造
- 负载因子是指当存储容量到达实际容量的多少了开始扩容,默认为0.75,也就是说初始容量为16,达到16*0.75的容量时候就开始扩容
1 | public HashMap() { |
自定义初始容量的构造
- 这个调用了下面一个构造
1 | public HashMap(int initialCapacity) { |
自定义初始容量和负载因子的构造
>>>
是移位运算符,和>>
、<<
不同的是,在使用该运算符的时候高位用0填充,而其他两个用的是符号填充|=
是指or运算符,并赋值,和+=
、*=
表示行业相同,|
表示在二进制中运算- 原码:数字原本的二进制字节码,最高位的标识符号位,0标识正数,1表示负数
- 反码:正数的反码是其本身,负数的反码是符号位不变,其他位取反
- 补码:正数的补码是其本身,负数的补码是在反码的基础上+1
1 | public HashMap(int initialCapacity, float loadFactor) { |
初始数据的构造
- 泛型标识介绍:
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ?- 表示不确定的java类型
- <? extends K> 表示传入的类型上限为K的类型,也就是说必须为K的子类
- <? super K> 表示传入的类型下限为K的类型,也就是说必须为K的父类
1 | public HashMap(Map<? extends K, ? extends V> m) { |
- 本文作者: Juaoie
- 本文链接: http://uaoie.top/2020/07/02/java/HashMap的简易解读/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!