Java 集合 面试

Java 集合

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:
  • Collection:代表一组对象,每一个对象都是它的子元素。
  • Set:不包含重复元素的Collection。
  • List:有顺序的collection,并且可以包含重复元素。
  • Map:可以把键(key)映射到值(value)的对象,键不能重复。

ArrayList
底层基于数组 增加超过容量会扩容(数组复制 Arrays.copyOf) 减少也会复制数组
线程不安全:添加元素时,
1. 在 Items[Size] 的位置存放此元素; 
2. 增大 Size 的值。 
不是原子操作


LinkedList
基于双向链表 查找会遍历(二分查找)

线程安全的集合可以用

包装起来

CopyOnWriteArrayList
使用了一种叫 写时复制 的方法,当有新元素添加到 CopyOnWriteArrayList 时,先从原有的数组中拷贝一份出来,然后在新的数组做写操作,写完之后,再将原来的数组引用指向到新数组。
 合适 读多写少 的场景,

HashMap
数组+链表 (1.8以上链表长度大于8会升级成红黑树 查找快)
扩容: 会重新计算hash(1.7)
看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引 +oldCap”(1.8)
线程不安全 : 1,put的时候 头插入 链表指向
2,扩容的时候,新数组的指向
3,扩容的时候,死链
数组长度一定是2的次幂:为了分布均匀

ConcurrentHashMap
JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树,

HashSet
有一个HashMap属性(适配器模式)
每个属性是HashMap的key。value是一个new Object()


TreeSet
有一个 TreeMap 属性(适配器模式)

TreeMap

底层通过红黑树(Red-Black tree)实现

LinkedHashMap
LinkedHashMap是HashMap的一个子类,它保留插入的顺序,底层使用哈希表与双向链表来保存所有元素
应用:LRUCache(近期最少使用) 通过LinkedHashMap 访问顺序

LinkedHashSet

有一个LinkedHashMap (适配器模式)    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值