ArrayList的问题以及解决方案

单线程环境下使用ArrayList
    List list =new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        for (String element:list){
            System.out.println(element);
        }

我们经常在项目中会这样使用ArrayList,我们来分析一下,当我们执行底层干了些什么

 List list =new ArrayList<>();

底层创建了一个空的数组,初始化值为10,当我们执行add方法的时候,如果超过10.那么就会扩容,扩容值的大小为原值的一半,也就是5个,使用下列方法进行扩容

 elementData = Arrays.copyOf(elementData, newCapacity);

但是ArrayList在单线程下是线程不安全的

多线程下使用ArrayList

        List list1 =new ArrayList<>();
        for (int i=0;i<50;i++){
            new Thread(()->{
                list1.add(UUID.randomUUID().toString().substring(0,8));
               

你可能感兴趣的:(java基础)