ArrayList
底层是数组,可以动态扩容的数组,初试容量是10,扩容因子1.5,每次扩容1.5倍,线程不安全
Java面试之ArrayList为什么线程不安全?
Vector:Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢
使ArrayList线程安全
方法:
List list = new ArrayList<>(2);
List list1 = Collections.synchronizedList(list);
ArrayList包装成线程安全的List后,和Vector的性能差不多
面试题:
public static void main(String[] args) {
Integer[] array = {1,2};
List<Integer> integerList = Arrays.asList(array);
Object[] objectArray = integerList.toArray();
System.out.println(objectArray.getClass()==Object[].class); //false
System.out.println(objectArray.getClass()); //class [Ljava.lang.Integer;
System.out.println(Object[].class); //class [Ljava.lang.Object;
List<Integer> list = new ArrayList<>();
System.out.println(list.toArray().getClass()==Object[].class);//true
List list2 = new ArrayList();
System.out.println(list.getClass()==list2.getClass());//true
}
LinkedList
底层是双向链表