八股文之Java集合

1.集合概览

1.Java集合主要由两大接口派生而来,Collection,Map

2.Collection接口主要有三个子接口,List,Set,Queue;Map主要用于存放键值对

2.List,Set,Queue,Map的区别

1.List:有序,可重复

2.Set:无序,不可重复

3.Queue:有序,可重复

4.Map:存放键值对,key是无序不可重复,value是可重复的

注意:这里的无序并不是指随意位置存放,而是根据hash值进行定位。

3.集合底层数据结构

3.1.List

1.Vector:数组,线程安全

2.ArrayList:数组,线程不安全

3.LinkedList:双向链表,线程不安全

4.CopyOnWriteList:数组,底层基于复制的,使用lock锁,线程安全

3.2.Set

1.HashSet:底层HashMap

2.LinkedHashSet:底层LinkedHashMap

3.TreeSet:底层红黑树

3.3.Queue

1.PriorityQueue:使用数组实现的小顶堆

2.ArrayQueue:底层数组+双指针,使用数组模拟队列

3.4.Map

1.HashMap:底层数组+链表,若链表长度大于8,先判断数组长度是否小于64,如果是,就先扩容数组,解决哈希冲突,否则将链表转为红黑树。

2.LinkedHashMap:底层数组+链表,在HashMap的基础上增加了节点之间的双向链表,保持了插入的顺序性。

3.HashTable:数组+链表,线程安全,但是效率低,每次操作都全局上锁,并发度低。

4.ConCurrentHashMap:jdk1.7之前是分段数组+链表,jdk1.8及以后是Node数组+链表,分段上锁,只对操作的部分进行上锁,提高了并发度,同时保证线程安全。

5.TreeMap:底层红黑树,需要对map进行排序,就选它。

4.Vector和ArrayList的区别

未完待续......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值