java面试中一些常见的集合类汇总总结

一、集合

1、list集合

list集合主要包括:

ArrayList,  CopyOnWriteArrayList, LinkedList, Stack, Vector

重点讲一下CopyOnWriteArrayList

1.1、CopyOnWriteArrayList

类说明:线程安全,适用于写少读多的缓存场景,添加元素时,将整个集合复制一份,将对象改变后,将原先集合的引用指向修改后的集合,整个写入操作是加锁的。

内存占用问题。因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象,需要控制对象大小,防止频繁的Yong GC和Full GC。

add方法代码:

2、Set集合

set集合主要包括:

CopyOnWriteArraySet 同CopyOnWriteArrayList特性一致

HashSet 不允许重复元素,无序,线程不安全

LinkedHashSet 无序,允许重复元素,线程不安全

TreeSet  有序,不允许重复元素,线程不安全

3、map集合

map集合主要包括:

ConcurrentHashMap

  • 采用分段加锁机制保证多线程环境下集合的安全性,整个map分成多个segment,segment的个数决定了能同时并发修改的线程个数,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。

HashMap

  • 底层数组+链表实现,可以存储null键和null值,线程不安全
  • 初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂
  • 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入
  • 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀
  • java8后为提高时间效率,在发生hash碰撞后形成链表,如果链表长度超过一定长度(一般是8)之后会形成红黑树的数据结构提高查询效率。
HashMap的Entry的一些属性:
K key
V value
Entry<K, V> next
int hash

Hashtable

  • 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化

LinkedHashMap,

  • LinkedHashMap 是 HashMap 的一个子类,保存了记录的插入顺序,在用 Iterator遍历LinkedHashMap 时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。
  • 通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素迭代的顺序。
LinkedHashMap的Entry的一些属性:
K key
V value
Entry<K, V> next
int hash
Entry<K, V> before
Entry<K, V> after

TreeMap

有序的map集合,是一个有序的map集合。

TreeMap的一些属性:
K key;    //键
V value;    //值
Entry<K,V> left = null;     //左孩子节点
Entry<K,V> right = null;    //右孩子节点
Entry<K,V> parent;          //父节点
boolean color = BLACK;      //节点的颜色,在红黑树种,只有两种颜色,红色和黑色

WeakHashMap

WeakHashMap 与HashMap的区别,很简单。就是WeakHashMap的Key的对象,如果除了自身有对key的引用外(意思就是没有其它外部引用 ),那么,这个Key和Value,就会被自动删除掉,而HashMap的则不会。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值