Java集合

List,Set,Map三者的区别?

List:有序集合(此处的有序指的是取出来的数据顺序和存进去的数据顺序一致),可以存储多个元素,也可以存储多个null值。
Set:无序集合,不可以存储多个元素,只可以存储一个null值。
Map:使用键值对的方式存储数据,key是无序且唯一的,value值不唯一,不同的key可以对应相同的value。

常见框架底层数据结构

List:
ArrayList:底层使用数组实现。
LinkedList:底层使用双向链表实现。
Set
hashset:底层使用hashmap实现。
HashMap:
使用链表,数组和红黑树实现。

ArrayList扩容机制

每次扩容之后的大小都是原来大小的1.5倍。

ArrayList和LinkedList的区别

线程安全:两者都是不保证线程安全的。
底层实现机制:ArrayList底层是数组,LinkedList底层是双向链表。
适用场景:ArrayList适用于多读少增删,LinkedList适用于多增删,少读。
内存占用:ArrayList每次扩容之后都是原数组的1.5倍会存在一定的资源浪费,LinkedList节点里面需要存放直接前驱和后继,资源消耗比较大。

Map

在jdk1.8中hashmap的底层实现是数组+链表+红黑树

jdk1.8中的两次扰动

一次位运算一次异或总共两次扰动。
一次异或:key.hashcode()与key.hashcode()的高16位进行异或,这样key.hashcode()高16位不变,低16位既具备高16位特点又具备低16位特点,进而减少碰撞的发生。
一次位运算:异或之后的结果和hashmap的容量-1进行位运算。

hashmap扩容机制

初始值为16,负载因子为0.75,阈值为容量*负载因子。
每次扩容,容量都是原来的两倍。
扩容之后需要重新计算那些节点的存放位置,hash值对数组长度取余若为0,存放位置不变,为1,存放位置为原位置+原容量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值