Java集合框架

1.ArrayList,LinkedList,Vector
三者都实现集合框架中的List,有序集合
Vector:Java早期的动态数组,线程安全,效率比较低,扩容时提高一倍
ArrayList:动态数组,非线程安全,效率比较高,扩容时增加50%,支持随机访问
LinkedList:Java提供的双向链表,非线程安全
2.HashMap,HashTable,TreeMap
三者都实现Map集合
HashTable:Java早期提供的一个哈希表实现,本身同步,不支持null键和值,同步带来性能开销,很少使用,使用Synchronize来修饰方法
HashMap:非同步,支持null键和值,利用键值对存取场景的首选
TreeMap:基于红黑树的一种提供顺序访问的map,get,put,remove都是O(log(n))的时间复杂度
HashMap的底层实现
在JDK1.8之前使用数组+链表的数据结构,JDK1.8之后,当链表长度大于阈值(默认为8)使用数组+红黑树,减少搜索时间,通过key的hashcode,经过hash方法,得到hash值,通过(n-1)&hash,得到元素的存储位置。
HashMap的resize方法:
容量极限是2的30次方,门限值=负载因子*容量
元素个数大于门限值时,调整map大小,以倍数进行调整。
HashMap长度是2的幂次方的原因:为了让HashMap存取更加高效,尽量减少碰撞
HashMap多线程下会导致死循环:resize方法,扩容时将原数组的元素拷贝到新数组时,多线程下可能会导致环形链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值