1.ArrayList是线程安全的吗?
不安全,Vector是线程安全的,但是生产环境已经不用了。目前使用CopyAndWriteArrayList 和 Collections.synchronizedList(List<T> list)
2.List接口的继承关系
ArrayList:底层是动态数组、查找快,增删慢,默认初始容量是10、每次采用1.5倍的容量扩容(在内存有一块连续的空间,只要有内存下标地址可以马上定位到数据);
Vector:和ArrayList一样的,不同的是Vector是线程同步的;
LinkedList:采用的是双向链表结构存储数据,适用于动态地插入和删除,但是随机访问和遍历的效率比较慢,(因为它是要从头节点一个一个的去执行),除此之外还有Deque接口因此还有队列的特性jdkl1.6版本之前支持循环双向链表结构,1.7以后的版本取消了循环结构图标如下图所示:(双向链表:出去头尾两个节点中的其余任意一个节点都可以定位到前后两个节点;循环双向链表:把头部的前节点prev指向最后一个节点;把最后一个节点的后节点next指向头部节点;双向链表的主要优点: 对于任意给的结点,都可以很轻易的获取其前结点和后结点。
其主要缺点:每个结点需要保存next和prev两个属性,因此需要更多的空间开销,同时结点的插入与删除操作也将更加耗时,因为需要操作更多的指向操作。)
3.ArrayList和linkedList的对比