Arrlist、HashMap 重要知识

Arrlist、HashMap 重要知识

研究代码(不想看可以忽略推荐自己查看源码)
1、看是否线程安全。
在代码中搜索synchronized这个关键字,程序中一般来说会有相应说明,另外检查是否有函数被这个关键字修饰
2、英文好的情况下 读取前边的说明
3、检查存储结构。
4、检查构造器,
5、检查重要的api

面试必问
linkedList 与ArrayList的区别 :
基于链表
一个基于数组

ArrayList
我上大学的时候研究过这个源码,(证明读过大学,也可以给自己留余地)
以添加过程为例说明存储的结构。
1 检查容量,如果还没有任何数据,则给一个初始容量,如果我没有记错的情况下,应该是10.
2、如果有数据,则判断容量是不是够大(需要的空间大于容量的时候,负载因子/加载因子=100%),如果不够大则扩容。
扩容后的大小是原来的1.5倍,源代码是原来的容量加上原容量右位移1位,这些写的好处是提高速度,我看了这个代码以后,
我在项目当中也经常使用位运算。扩容后并不是在原来的数组之上添加,而是生成一个新的数组,把原来的数组内容复制到新的数组当中。
这里边使用的是Arrays的copy 方法,这个方法其实是调用了System.arraycopy方法。

LinkedList
线程不安全。
扩容机制,没有。
存储的机制基于链表。

应用场景:
LinkedList :频繁的插入删除操作的时候;
ArrayList:数据相对稳定的情况下。
为什么ArrayList插入删除慢? 涉及到频繁的数组的拷贝或者重新申请内存等。

HashMap
线程不安全。
存储结构:
存放的是键值对Entry类型数组。这个里面包含的元素有key 的hash值,key 、value 和指向下个元素的指针。
默认的初始容量是16,代码里边写的是1右位移4位。
存放的数据并不是无限的,最大数量是:1 << 30;
默认的加载因子是0.75;
红黑树与链表相互转换的阈值是6 和 8.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_交个朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值