HashMap学习笔记01(此篇主要分析HashMap的功能优势)

HashMap学习笔记01 (此篇主要分析HashMap的功能优势和基本属性)

常见的数据结构:集合,线性结构,树形结构,图形结构

ArrayList基于数组,便于查找不便于增加删除
单向链表 class Node{Object data;Node next}
LinkedList基于双向链表 class Node{Object data;Node next;Node pre} 便于删除增加不便于查找

HashMap则是结合了数组和链表

存储单位为: Node{hash; key; value; Node next}
存储数组: Node<K,V>[] table
key-value数量 size ,也是之后常用到的hashMap.size的来源
阈值: threshold (当table为空时,该值初始容量默认为12;当table被填充了,也就是为table分配内存空间后,threshold一般为 capacity(初始容量默认为16)*loadFactory。HashMap在进行扩容时需要参考threshold)
负载因子 : loadFactor 代表了table的填充度有多少,默认是0.75 (在HashMap构建的时候赋值)
操作数 : modCount 用于快速失败,由于HashMap非线程安全,在对HashMap进行迭代时,如果期间其他线程的参与导致HashMap的结构发生变化了(比如put,remove等操作),需要抛出异常ConcurrentModificationException

在这里插入图片描述
数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前Node的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值