1、什么是List?
List是继承于collection的一种集合。List是用于存储多个相同class实例的集合。
2、为什么会出现List?
在java中我们最先知道的保存一系列的相同元素的器具是数组。但是由于数组长度在构建的时候就必须指定好,但是很多情况下是不满足的,因为很多情况我们不知道具体的长度,需要能灵活对待,因此就诞生了List。
3、List的特点
a、List的设计是有序的,那么为什么List是有序的呢?
LIst的实现子类可以分为3种,一是ArrayList,一个是LinkedList, 一个是vector
其中ArrayList,vector 的底层是数组,数组大家都知道是可以通过索引拿到对应元素的,而且也是有序的,因此List是有序的
对于 LinkedList来说,底层是双向链表,双向链表肯定是有序的,因为有双向的指针,因此存取顺序就可以得到保证。
b、List是不保证唯一的,也可以存放null?
由于是存放元素于数组中,无需判断是否重复。
4、线程安全问题
对于一个集合类来说,他的添加方法都会有多线程异常的隐患存在,那么对于List来说,有什么子类是线程安全的么?
List中的线程安全的类有很多,比较重要的是vector 和CopyOnWriteArrayList,以及线程安全包装类。
5、vector 实现线程安全的原理
vector 是线程安全的List,是源于他的所有方法都是被sync锁住的,因此都是同步的方法,因此是线程安全,不过也正因为如此他的性能也比较低。