您的位置:首页 > 编程语言 > Java开发

Java集合归纳总结

2020-11-06 10:28 89 查看

我们讲集合,就是Collection顶级接口下包括的一些常用集合数据结构,大致分为三类:List(可重复元素集)、Map(KV映射集)、Set(不可重复集)、Queue(队列)

总结: 1、ArrayList:底层数组,支持O(1)的时间复杂度根据下标的随机访问,在指定位置插入数据会触发底层数组拷贝,数据量大的时候性能较差。 2、LinkedList:底层单向链表,支持O(1)的时间复杂度增删元素,在随机访问链表属性时需要从头遍历,数据量大的时候性能较差。 3、Vector:底层数组,所有操作都通过synchronized加上同步锁,增删查读性能较差,线程安全场景建议CopyOnWriteArrayList 4、SynchronizedList:与Vector相比,使用synchronized同步代码块加锁,可以指定锁的对象,底层数据结构可以自由选择ArrayList或者LinkedList,这一点也是Vector不具备的。 5、CopyOnWriteArrayList:底层volatile 修饰数组,持有ReentrantLock保证写安全,写时复制,读的时候读copy副本,读写锁分离所以性能较好,不过存在内存占用和数据一致性的问题,如果需要数据的强一致性,请勿使用,适合读多写少的场景。 6、HashSet:底层HashMap的Key,hashMap的value是一个常量new Object(),无序不重复,允许null值, 7、TreeSet:底层是一个TreeMap,通过红黑树的特性保证key的有序性。 8、LinkedHashSet:集成HashSet,基于linkedHashMap的单链表队列实现。 9、CopyOnWriteArraySet:基于CopyOnWriteArrayList,使用indexOf保证无重复数据 10、PriorityQueue:优先级队列,底层实现为完全二叉树,实现Comparator接口,不允许元素为null,线程不安全,线程安全需要使用PriorityBlockingQueue 11、LinkedBlockingQueue:单链表阻塞队列,内部持有两个ReentrantLock(putLock、tackLock)保证任务元素的出入对线程安全,持有两个Condition(notFull、notEmpty),通过各自的awit和signal实现等待和唤醒。 12、ArrayBlockingQueue:数组阻塞队列,与LinkedBlockingQueue相比区别主要有以下几个方面:初始容量(有界无界)、存储结构(node链表、数组)、出入队锁(Link两个、Array一个)。 13、HashMap:非线程安全,HashEntry数组+链表(红黑树)、尾插法、add触发初始扩容rehash。 14、LinkedHashMap:双向链表+HashMap,默认插入有序(还有访问有序) 15、TreeMap:非nullkey,并需要实现Comparator接口,基于红黑树保证key有序。 16、ConcurrentHashMap:hashMap+CAS(synchronized),先使用CAS乐观锁,不行进行锁升级synchronized,锁的对象为插入位置的Node节点,锁粒度变小,性能提高。 17、SynchronizedMap:同步版HashMap,方法都用synchronized同步代码块保证并发安全,并发安全但性能较差 18、HashTable:方法都用synchronized修饰,锁住当前对象,粒度>=SynchronizedMap,已弃用。

面试重点: 1、ArrayList和LinkedList的区别?(基础) ArrayList随机下标访问性能高(数组),内部插入效率低(尾插都一样) LinkedList中间插入性能高(链表)、随机下标访问效率差(需从头遍历)。 2、线程安全的List有吗?了解其原理吗?使用场景分别是什么?有什么弊端?(进阶) 线程安全的List有SynchronizedList和CopyOnWriteArrayList,Vector(弃用),原理弊端见上总结,数据强一致性用SynchronizedList,非强一致性且读多写少场景用CopyOnWriteArrayList 3、HahsMap的底层原理?相比1.7,1.8对于hashMap有什么改进提升?(基础) 1.7:HashEntry数组+链表(底层结构)、头插(并发取值链表成环get死循环)、new触发数组初始化。 1.8:HashEntry数组+链表+红黑树(底层结构)、尾插、add触发数组初始化,阈值8触发树化,阈值8 - 1 触发反树化。 4、并发安全的Map有吗?说说其原理?(进阶) ConcurrentHashMap、SynchronizedMap,hashTable(弃用)原理见上总结内容

以上就是个人对于Java集合的一些理解,要是大家觉得对你有帮助,就帮忙点个赞吧,谢谢

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: