Java集合框架-HashMap

本文详细介绍了HashMap的特点,如使用Node对象数组实现、扩容机制、初始化和常用方法,包括put、get、size等。同时,讨论了HashMap的遍历方式,推荐使用Map.Entry对象的增强for循环。另外,对比了HashMap与其他Map实现,如TreeMap的排序功能和HashTable的线程安全性。
摘要由CSDN通过智能技术生成

1、HashMap特点

存放的元素都是键值对(key-value),key是唯一的,value是可以重复的
存放的元素也不保证添加的顺序,即是无序的
存放的元素的键可以为null,但是只能有一个key为null,可以有多个value为null(前提是存放的是HasHap对象)
如果新添加的元素的键(key)在集合中已经存在,自动将新添加的值覆盖到原有的值

2、底层实现

HashMap的底层使用的是Node对象数组;

HashMap源码

transient Node<K,V>[] table; //Node对象数组

//Node类
static class Node<K,V> implements Map.Entry<K,V> {
        final int hash;
        final K key;
        V value;
        Node<K,V> next;
	......
}

3、扩容

  • HashMap的底层使用的是Node对象数组,初始容量(未自定义)是16,根据负载因子跟数组容量,计算出扩容临界值,每当存放元素达到了临界值就可以扩容,而不是等到数组长度不够;
  • 每次扩容,都是原有数组容量的2倍,必须要保证是2的整数次幂(底层算法实现),最大容量是2的30次方;

初始容量和默认扩容因子

/**
 * Constructs an empty <tt>HashMap</tt> with the default initial capacity
 * (16) and the default load factor (0.75).
 */
//初始容量为16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

//默认扩容因子为0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;

//最大容量是2的30次方
static final int MAXIMUM_CAPACITY = 1 << 30;

public HashMap() {
    this.loadFactor = DEFAULT_LOAD_F
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值