一、集合类组成架构
二、ArrayList、LinkedList、Vector 的区别
1)首先普及一基础知识,数组和链表
数组和链表都是线性表(数据成线性排列),只有前后两个方向;
数组是连续的内存空间、存储相同的数据类型;
链表是可以非连续的内存空间存储相同的数据类型;
2)简单说一下ArrayList、LinkedList、Vector 的区别
ArrayList:线程不安全数组,随机查询快,增删慢;
LinkedList:线程不安全的双向链表封装,每个节点包含上一个节点信息和下一个节点信息,查询慢,增删快;
Vector:线程安全数组,随机查询快,增删慢; Vector本身所有方法都是用synchronized修饰的,所以线程安全,而ArrayList没有
三、synchronizedlist和vector的区别
1) 数据增长有区别
2)同步代码块和同步方法的区别,vector同步方法。synchronizedlist同步代码块
四、Hashtable、HashMap、ConcurrentHashMap区别
1)Hashtable:底层数组+链表 线程安全、不允许KEY,VALUE都不允许为NULL,线程安全实现方式synchronized锁住整个Hashtable;
2)HashMap:底层数组+链表 线程不安全,运行空键和空值。
3)ConcurrentHashMap 底层数组+链表 线程安全 使用 synchronized 分段锁住 hash表,效率较高
五、Set 和 List 的区别
相同点:
1) 都实现了collection接口
不同点:
1)List 有序、允许重复、允许多个NULL值
2)Set 无序、不允许重复、只允许一个NULL值
六、Set 如何保证元素不重复
使用hashCode加equals 重复验证添加;
七、Java 8 stream的详细用法
https://blog.csdn.net/y_k_y/article/details/84633001
八、Apache的集合工具类的使用
https://www.cnblogs.com/crazylqy/p/4872236.html
九、不同版本的JDK中HashMap的实现的区别以及原因
https://blog.csdn.net/YingHuaNanHai/article/details/81273218
十、collection和collections的区别
collection:是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
collections:Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
十一、Arrays.asList()方法使用需要注意什么
首先,该方法是将数组转化为list。有以下几点需要注意:
(1)该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
(2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
(3)不支持add和remove方法
十二、enumeration和iterator的区别
1)java中的集合类都提供了返回Iterator的方法,就是迭代器,它和Enumeration的主要区别其实就是Iterator可以删除元素,但是Enumration却不能。
2) 还有一点要注意的就是,使用Iterator来遍历集合时,应使用Iterator的remove()方法来删除集合中的元素,使用集合的remove()方法将抛出ConncurrentModificationException异常。
3) Enumeration 与 iterator 都是迭代输出的方法,Enumeration先进后出,iterator先进先出
十三、fail-fast和fail-safe
fail-fast:fail-fast机制在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception。
单线程环境和多线程环境
fail-safe:任何对集合结构的修改都会在一个复制的集合上进行修改,因此不会抛出ConcurrentModificationException
fail-safe机制有两个问题
(1)需要复制集合,产生大量的无效对象,开销大
(2)无法保证读取的数据是目前原始数据结构中的数据。
十四、CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。
CopyOnWrite并发容器用于读多写少的并发场
缺点:
1. 内存占用问题 :因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象
2. 数据一致性问题:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。
十五、ConcurrentSkipListMap
1)TreeMap使用红黑树按照key的顺序(自然顺序、自定义顺序)来使得键值对有序存储,但是只能在单线程下安全使用;多线程下想要使键值对按照key的顺序来存储,则需要使用ConcurrentSkipListMap。
2)ConcurrentSkipListMap的底层是通过跳表来实现的。跳表是一个链表,但是通过使用“跳跃式”查找的方式使得插入、读取数据时复杂度变成了O(logn)。
其他信息请查看专栏:https://blog.csdn.net/u012547633/column/info/39075