精华内容
下载资源
问答
  • list.addAll 和Collections.addAll 以及遍历添加方法性能实测对比 项目需求描述: 根据文件夹路径获取其下全部文件列表集合,这些文件是一个完整视频的分块,如下图所示,实际上返回时需要根据文件名(String类型的数字)...

    list.addAll 和Collections.addAll 以及遍历添加方法性能实测对比

    项目需求描述:

    根据文件夹路径获取其下全部文件列表集合,这些文件是一个完整视频的分块,如下图所示,实际上返回时需要根据文件名(String类型的数字)有序排列才能保证正确性,方法代码如下:

     	/**
         * 获取分块文件列表并排序
         * @param chunkfileFolder 分块文件目录
         * @return 分块文件列表
         */
        private List<File> getChunkFiles(File chunkfileFolder) {
            File[] files = chunkfileFolder.listFiles();
            if (files == null || files.length == 0) {
                logger.error("未查询到分片文件列表,chunkfileFolder:{}", chunkfileFolder);
                ExceptionCast.cast(MediaCode.UPLOAD_FILE_REGISTER_ISNULL);
            }
            List<File> fileList = new ArrayList<>(files.length);
            fileList.addAll(Arrays.asList(files));
            //Collections.addAll(fileList, files); 效率更低,详见测试类
            Collections.sort(fileList, (o1, o2) -> {
                return Integer.parseInt(o1.getName()) > Integer.parseInt(o2.getName()) ? 1 : -1;
            });
            return fileList;
        }
    

    文件列表假数据

    问题描述:

    1.在代码13和14行时不确定性能于是写了个小Demo,具体如下:

     @Test
        public void testCollections() {
            // 模拟测试数据
            Integer[] arr = new Integer[1000000];
            for (int i = 0; i < 1000000; i++) {
                arr[i] = i;
            }
            //方式一:listAddAll方法
            List<Integer> list1 = new ArrayList<>(1000000);
            long start1 = System.currentTimeMillis();
            List<Integer> asList1 = Arrays.asList(arr);
            list1.addAll(asList1);
            System.out.println("ListAddAll 花费时间ms:" + (System.currentTimeMillis() - start1));
            //方式二:Collections.AddAll直接添加数组
            List<Integer> list2 = new ArrayList<>(1000000);
            long start2 = System.currentTimeMillis();
            Collections.addAll(list2, arr);
            System.out.println("CollectionsAddAll add数组花费时间ms:" + (System.currentTimeMillis() - start2));
            //方式三:遍历添加
            List<Integer> list3 = new ArrayList<>(1000000);
            List<Integer> asList = Arrays.asList(arr);
            long start3 = System.currentTimeMillis();
            asList.stream().forEach(e -> Collections.addAll(list3, e));
            System.out.println("CollectionsAddAll 遍历add集合花费时间ms" + (System.currentTimeMillis() - start3));
    
            // 随机从集合中取出一个元素校验添加是否成功
            System.out.println("list1获取索引为10的元素:"+list1.get(10));
            System.out.println("list2获取索引为10的元素:"+list2.get(10));
            System.out.println("list3获取索引为10的元素:"+list3.get(10));
        }
    

    分别测试数据为百万级,十万级,千级数据,最终打印结果如下:

    百万级数据结果

    十万级数据结果

    千级数据结果

    总结:

    1、百万级及以上数据,list.addAll() 方法 效率是比Collections.addAll()快很多,遍历方式效率最低;

    2、百万级到万级间数据,list.addAll() 方法 效率和Collections.addAll()差不多,遍历效率最低;

    3、千级及以下数据,三种方式效率差别不大;

    4、Collections.addAll() 方法的优点是无需进行数组向集合的转换,可以将数组直接添加到目标集合中,适合十万级左右数据 ;

    5.list.addAll() 方法在百万级以上数据时效率最高;

    展开全文
  • 下面下一个往list 里面添加数据的方法 普通的写法 ArrayList<String> list = new ArrayList<>(); list.add("河南"); list.add("郑州"); list.add("开封"); list.add("周口"); list.add("商丘")...

     Collections 是java.util 下的一个类 ,可以直接使用

    下面下一个往list 里面添加数据的方法

    普通的写法

       ArrayList<String> list = new ArrayList<>();
            list.add("河南");
            list.add("郑州");
            list.add("开封");
            list.add("周口");
            list.add("商丘");

     使用:Collections.addAll()

      ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, "河南", "郑州", "开封", "周口", "商丘");

    或者定义一个数组添加到list 中

      String[] arr = {"河南", "郑州", "开封", "周口", "商丘"};
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, arr);

    可能看着和list.addAll 差不多,但是使用最明显的区别是,使用方法有点区别吧,

      String[] arr = {"河南", "郑州", "开封", "周口", "商丘"};
            ArrayList<String> list = new ArrayList<>();
            list.addAll(Arrays.asList(arr));
    
    // 或者
     String[] arr = {"河南", "郑州", "开封", "周口", "商丘"};
            ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));

    list.addAll 无法直接添加多个元素,也不能直接添加一个数组, 需要转换下

    当数量过多的时候 建议使用Collections.addAll() ,数量少的时候,使用哪个都可以,看个人习惯吧.

     

    展开全文
  • list.add()是添加一个item。 /** *@param e element to be appended to this list ...list.addAll()是添加一个Collection集合。 /** * @param c collection containing elements to be added to this list */ bo

    list.add()是添加一个item。

    	/**
    	*@param e element to be appended to this list
    	*/
        boolean add(E e);
        void add(int index, E element);
    

    list.addAll()是添加一个Collection集合。

    	/**
         * @param c collection containing elements to be added to this list
    	*/
    	    boolean addAll(Collection<? extends E> c);
    	    boolean addAll(int index, Collection<? extends E> c);
    
    package study_7_5.collection.List;
    
    import study_7_5.bean.Customer;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    /**
     * @author大圣啊
     * @date2021/7/5下午 04:53
     * @description:
     */
    public class ListDome {
        public static void main(String[] args) {
            Customer customer = new Customer("刘备", 55);
            Customer customer1 = new Customer("关羽", 44);
            Customer customer2 = new Customer("张飞", 33);
            Customer customer3 = new Customer("曹操",55);
            Customer customer4 = new Customer("孙权",55);
    
            List<Customer> list = new ArrayList<Customer>();
            list.add(customer);
            list.add(0,customer1);
            list.add(customer2);
    
            list.forEach(item -> System.out.println("姓名:" + item.getAge() + ",年龄:" + item.getName()));
    
    
            System.out.println("-----------------------");
            List<Customer> list1 = new ArrayList<Customer>();
            List<Customer> list2 = new ArrayList<Customer>();
    
            list1.add(customer3);
            list2.add(customer4);
    
            list.addAll(0,list1);
            list.addAll(list2);
    
            list.forEach(item -> System.out.println("姓名:" + item.getAge() + ",年龄:" + item.getName()));
        }
    }
    

    输出结果:

    姓名:44,年龄:关羽
    姓名:55,年龄:刘备
    姓名:33,年龄:张飞
    -----------------------
    姓名:55,年龄:曹操
    姓名:44,年龄:关羽
    姓名:55,年龄:刘备
    姓名:33,年龄:张飞
    姓名:55,年龄:孙权
    
    展开全文
  • list中使用addAll()添加一个list时,报空指针异常:网上找错发现我初始化时使用的是: List entitys= null; 1 后来改为 List entitys= new ArrayList<>(); 1 网上查找原因:只在栈中有引用而在堆中没有分配...

    在list中使用addAll()添加一个list时,报空指针异常:网上找错发现我初始化时使用的是:

    List entitys= null;
    1

    后来改为

    List entitys= new ArrayList<>();
    1
    网上查找原因:只在栈中有引用而在堆中没有分配到内存空间
    所以报错。记下来警醒自己

    展开全文
  • 阅读List源码注释可知:addAll的集合中一个或多个元素为空或集合为空都会抛出空指针异常。 看一眼具体实现类的方法。 ArrayList.addAll,若集合为空则会抛空指针异常。 可见使用addAll方法时应先判断入参集合时候...
  • Java List.addAll()方法:添加所有元素到列表中 Java 集合类的 List.addAll() 方法用于将指定 collection 中的所有元素添加到列表。 语法1 用于将指定 collection 中的所有元素添加到列表的尾部。如果 List 集合对象...
  • 使用Arrays.asList()转成的数组,调add或者addAll方法报错java.lang.UnsupportedOperationException 使用new ArrayList(Arrays.asList())转一下,再调add或者addAll方法。 下边讲下原因: 深入浅出一波源代码,...
  • addAll():则是将其他的list1,list2,list2=3…对象作为元素添加到当前的list集合中,此时list中的size大小就是list1,list2,list3…中的所有size加起来的大小。list里面的对象也是list1,list2,list3…中所有...
  • list.add()和list.addAll()区别

    千次阅读 2019-01-07 11:01:41
    例如:现在有一个a集合中里面有数据5条,分别添加进list.add()和list1.addAll() 取出时: list.get(0) = a集合 list.size = 1; list.get(0).size()=5 list1 = a集合;list1.size()=5 如果list1继续a...
  • 关于List.addAll的坑

    千次阅读 2019-08-25 21:11:56
    //这样返回的只是原来room1的东西,并不会成功加上 List<Room> rooms1= roomRepository.findByRentType(rentType); List<Room> rooms2= roomRepository.... rooms1.addAll(rooms2); return ...
  • List.addAll()和=赋值的区别

    千次阅读 2018-08-04 14:53:35
    前天做一个发起群聊的功能,需要做一个成员去重以及一个另一个群的成员列表,当时直接把参数赋值给了两个不同的集合...List&lt;Integer&gt; useres = new ArrayList&lt;Integer&gt;(); List&lt...
  • List.addAll方法的入参不能为null

    千次阅读 2019-05-19 10:21:10
    缘由: 某天,发现一段日志中出现了诡异的NPE。... new一个ArrayList,然后调用其addAll方法,并将入参设为null。 public static void main(String[] args) { List<String> list = new Arra...
  • java list.add()与list.addAll()方法

    千次阅读 2018-07-27 14:36:19
    List&lt;Object&gt; list1=new ArrayList&lt;Object&gt;(); list1.add(1);...list1.add(2);...List&... list2=new ArrayList&...list2.add(0);...list1.addAll(1, list2);//1表示在哪个位...
  • 1. 使用=进行赋值后,list2在栈内地址被移除并指向list1的栈内地址 ...3. 如果list1内是引用型数据,即存放的是数据在堆内的地址,则使用addAll()后将指向堆内同一位置,此时改变list3的值将同样改变list1的值
  • addAll方法用于将指定 collection 中的所有元素添加到列表。 语法1 用于将指定collection中的所有元素添加到列表的尾部。如果List集合对象由于调用addAll方法而发生更改,则返回true。 addAll(Collection&l...
  • List<String> lists = new ArrayList<>(); lists.addAll(null); 将会抛出空指针异常。
  • List.addAll()操作总结

    千次阅读 2017-03-08 23:03:30
    List引用一 ListPerson> persons = PersonService.getPersonsByAgeIn(18,23);//初始化一个Person的List。  ListPerson> backPersons = persons; 显然,对backPersons的操作会直接改变persons的数据。 ...
  • List.addAll(null);
  • list2.addAll(list1); 11 12 list1.add( new Person("suanliu",16 )); 13 Iterator<Person> iterator = list1.iterator(); 14 while (iterator.hasNext()){ 15 Person value = iterator.next(); ...
  • Exception in thread "main" java.lang.NullPointerException... at java.util.ArrayList.addAll(ArrayList.java:559) at com.iflytek.epdcloud.recruit.utils.quartz.Acool.main(Acool.java:16) import java.u...
  • 1.Collections.addAll() 与 ArrayList.addAll()都是将所有指定的元素添加到指定的集合中;但是两个的效率谁更高呢? 通过查看Collections.addAll() 源码有这样的一段话: The behavior of this convenience ...
  • 由于addAll()实现的是浅拷贝,即将List &lt;A&gt; copy=new ArrayList&lt;A&gt;(); List&lt;A&gt; src=new ArrayList&lt;A&gt;(); src.add(a); copy.addAll(src); copy.get(0).set...
  • 由于addAll()实现的是浅拷贝,即将 List A> copy=new ArrayList A>(); List A> src=new Array List A> (); src.add(a); copy.addAll(src); copy.get(0).setName("XXX"); 这时,...
  • list.AddAll 去重复

    千次阅读 2015-09-11 12:01:35
    问题描述: 有List A和B,A、B中元素都是可保证没有重复的,现要合并A、B得到新的List C,要求C中不能有重复元素   我们架构师的反应: A.removeAll(B); A.addAll(B);   ...
  • 我们在编码时经常需要将一些元素添加到一个List中,此时我们一般有两种选择:Collections.addAll()或者是ArrayList.addAll()。在需添加元素比较少的情况下,并在List的size在万级以上时,一般建议Collections.addAll...
  • 最近突然看到几种Array转List的方法,对其中的Collections.addAll方法以及使用Stream表达式两种方式的速度比较感兴趣。 结论:Collections.addAl比Stream表达式速度更快。
  • // java 使用 java.util.Collections 将 数组 转成 list List<String> list1 = new ArrayList<...boolean addAll1 = java.util.Collections.addAll(list1, new String[]{"M.Salah", "Crisitiano", ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,513
精华内容 39,005
关键字:

list.addall