java中几种常见的数据结构,List、Set、Map的底层数据结构及相关小结

一:List
List的常见具体实现有:ArrayList、LinkedList、Vctor、 CopyOnWriteArrayList、Collections.synchronizedList等
1:ArrayList 底层数据结构是基于数组,查询和修改快,增删慢。线程不安全,以前的默认初始化容量是10,现在是0,可动态扩容,扩容后的容量=初始容量+初始容量/2。
2:LinkedList 底层数据结构是基于链表结构,增加和删除快,查询和修改慢,线程不安全。
3:Vctor 底层数据结构是基于数组,因为在每个方法是前面都加了synchronized同步锁机制,所有线程安全。但是效率不高,现在比较少用
4:CopyOnWriteArrayList 底层是基于数据结构,在部分方法上加了分段的同步锁机制,线程安全。但是由于添加的时候需要先复制一份数据出来,需要多消耗一些资源,因此多应用于查询多的高并发场景。
5:Collections.synchronizedList 线程安全,一般用于高并发的场景。

二: Set
Set的常见实现有HashSet 、TreeSet、LinkedHashSet
1:HashSet 底层数据结构基于hash算法实现,可保证元素不重复,但是无序
2:TreeSet 底层数据结构是基于二叉树结构,可保证元素有序
3:LinkedHashSet 用链表来保证元素的有序性,遍历整个集合时,效率比HashSet高,插入元素时效率略低

三:Map
Map的常见实现有HashMap、HashTable、LinkedHashMap、ConcurrentHashMap、Collections.synchronizedMap
1:HashMap 1.7版本及以前底层数据结构是数组+链表 1.8开始是数组+链表+红黑树,在链表的深度大于8时自动转换成红黑树结构。 默认初始化容量是16,负载因子为0,75,可动态扩容。线程不安全,key和value 值允许为空。
2:HashTable 区别于HashMap在加了synchronized同步锁机制,线程安全,key和value 值不允许为空,但效率低,较少使用。
3:与HashMap的区别在与可通过链表结构,保证元素的相对有序性,线程不安全。
4: ConcurrentHashMap 底层数据结构与HashMap类似,但是由于有synchronized同步锁机制,线程安全。通常用在高并发场景下保证数据一致性。
5:Collections.synchronizedMap 线程安全,但是效率低,一般不使用。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值