Java面试基础知识汇总-02

1. hashMap(由数组+链表+红黑树 JDK1.8) 其中如果没有设置初始化大小时候,在put的时候会进行初始化容量大小为16,默认的负载因子为0.75,即如果容量为16,如果超过16*0.75=12的时候,就会扩容,每次扩容的大小为原来的2倍,即16,32,扩容后,会重新计算原来的数组中的key的位置,其中数组中的key为hash的key的值,数组的索引计算公式为h & (length-1);其中h为hash值,所以当如果扩容之后,原来数组的位置为原来的位置a,或者是a +原来的数组长度,假设原来的数组长度为5 则扩展后为5或者21.其中数组中为二维数组,第一项为key, 第二项为链表,链表为了解决hash冲突;

其中负载因子为:0.75, 阈值:threshold

会变化;

Node<K,V>[] table存取的是key和值
 //capacity  2-4-8-16-32-64
//threshold 1-2-6-12-24-48
//default_load_factor =0.75f

2.  如果是hash碰撞,后加入的值是加入在链表头还是链表尾呢?

看jdk源码,1.7是表头,1.8是表尾。表头插入会导致死循环的问题,造成CPU百分百

 

2.ArrayList
ArrayList 初始化大小是 10 (如果你知道你的arrayList 会达到多少容量,可以在初始化的时候就指定,能节省扩容的性能开支)
扩容点规则是,新增的时候发现容量不够用了,就去扩容
扩容大小规则是,扩容后的大小= 原始大小*1.5

 

3.linkedList
linkedList 是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。
对于双向链表的理解

4.Hashtable
默认初始容量为11,线程安全,但是速度慢,不允许key/value为null。
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍时,进行扩容。
扩容增量:2*原数组长度+1,如 HashTable的容量为11,一次扩容后是容量为23

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值