【面试大纲】Java集合-ArrayList

2019-12-03  本文已影响0人  bearPotMan

List

首先说一下list的一些特点:list中的元素是有序并且有重复的!
以下内容请结合源码一起食用效果更佳!

ArrayList

底层是什么?

ArrayList的底层是数组

初始化参数有哪些?

扩容机制是怎样的?

是否线程安全?

ArrayList是非线程安全的!为什么?

拓展: 如果想要使用线程安全的ArrayList有没有呢?
可选方案有:Vector、Collections.synchronizedList()、CopyOnWriteArrayList
小妙招:如果能确定ArrayList的初始容量,最好是使用new ArrayList(int initialCapacity)这个构造函数,避免数组扩容带来额外的影响。

使用场景有哪些?

ArrayList的一个特性就是它的底层是基于数组的,数组是一种线性数据结构,在内存中的存储空间是连续的。

所以说,对于只是随机访问的,使用ArrayList是个不错的选择,效率高还安全!如果要执行一些增删改的操作,可以考虑使用LinkedList!
下一篇就说一下LinkedList!

彩蛋
多次执行下面的代码,看看有什么发现?

public class ArrayListUnsafeTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(10);
        for (int i = 0; i < 5; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0, 8));
                System.out.println(list);
            }, String.valueOf(i)).start();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读