Java Collections.addAll() 与 ArrayList.addAll() 的区别
来源:互联网 发布:大数据分析技术 编辑:程序博客网 时间:2024/06/05 00:22
我们在编码时经常需要将一些元素添加到一个List中,此时我们一般有两种选择:Collections.addAll()或者是ArrayList.addAll()。在需添加元素比较少的情况下,并在List的size在万级以上时,一般建议Collections.addAll(),但当List的size较小时,两种方法没有什么区别,甚至ArrayList.addAll()更好。
当我们将一个数组添加到一个List中时,Collections.addAll()和ArrayList.addAll()没有什么性能差异。
但当我们将一个List添加到一个List中时,建议使用ArrayList.addAll()。
添加数组和列表,要比添加元素快。
HashMap和HashSet有类似用法。
示例代码如下(为了尽量不让gc对实验结论影响,特意将jvm设置成了16G):
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class CollectionsTest {public static void main(String[] args) {List<Integer> list1 = new ArrayList<Integer>() {{add(0); add(-1);}};List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(2, 4, -9));list1.addAll(list2);System.out.println(list1);list2.set(0, 100000);System.out.println(list1);//深复制System.out.println();//功能性展示Collections.addAll(list2, 34, 67, 78);System.out.println(list2);list2.addAll(Arrays.asList(34, 67, 78));System.out.println(list2);System.out.println();//性能展示System.out.println("添加元素---------------------------\n");for(int size = 1000; size < 100000000; size *= 10) {long time = System.nanoTime();List<Integer> list3 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {list3.addAll(Arrays.asList(1, 45, 34, 456, 1212, -6, 43, 55));}System.out.println("ArrayList.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time));time = System.nanoTime();List<Integer> list4 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {Collections.addAll(list4, 1, 45, 34, 456, 1212, -6, 43, 55);}System.out.println("Collections.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time) + "\n");}System.gc();System.out.println("添加数组---------------------------\n");Integer[] arr = {1, 45, 34, 456, 1212, -6, 43, 55};for(int size = 1000; size < 100000000; size *= 10) {long time = System.nanoTime();List<Integer> list3 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {list3.addAll(Arrays.asList(arr));}System.out.println("ArrayList.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time));time = System.nanoTime();List<Integer> list4 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {Collections.addAll(list4, arr);}System.out.println("Collections.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time) + "\n");}System.gc();System.out.println("添加列表---------------------------\n");ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 45, 34, 456, 1212, -6, 43, 55));for(int size = 1000; size < 100000000; size *= 10) {long time = System.nanoTime();List<Integer> list3 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {list3.addAll(list);}System.out.println("ArrayList.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time));time = System.nanoTime();List<Integer> list4 = new ArrayList<Integer>();for(int i = 0; i < size; i++) {Collections.addAll(list4, list.toArray(new Integer[0]));}System.out.println("Collections.addAll()@size = " + size + "\ntime:" + (System.nanoTime() - time) + "\n");}}}运行截图展示:
HashMap和HashSet的类似用法
示例代码:
import java.util.Collections;import java.util.HashMap;import java.util.HashSet;public class CollectionsTest {public static void main(String[] args) {HashSet<Integer> set1 = new HashSet<Integer>();HashSet<Integer> set2 = new HashSet<Integer>() {{add(5);}};Collections.addAll(set1, 2, 4, 6, 7);System.out.println(set1);set1.addAll(set2);System.out.println(set1);HashMap<Integer, Integer> map1 = new HashMap<Integer, Integer>(){{put(1, 5);}};HashMap<Integer, Integer> map2 = new HashMap<Integer, Integer>(){{put(3, 4);}};map1.putAll(map2);System.out.println(map1);}}运行截图:
0 0
- Java Collections.addAll() 与 ArrayList.addAll() 的区别
- Java Collections.addAll() 与 ArrayList.addAll() 的区别
- ArrayList的addAll 与 for循环比较
- java中list的add与addall方法区别
- java Arraylist.addAll方法---arraycopy
- Java arrayList addAll方法使用
- List 的add()与addAll()的区别
- List 的add()与addAll()的区别
- 【Java编程思想第4版错误记录】Collections.addAll()静态方法与Collection.addAll()成员方法
- android Collections.addAll()的使用
- 关于arrayList的add和addall
- 关于arrayList的add和addall
- ArrayList的addAll方法使用注意
- 关于List的add方法与addAll方法的区别
- List的add方法与addAll方法的区别
- List的add方法与addAll方法的区别
- 关于List的add方法与addAll方法的区别
- List的add方法与addAll方法的区别
- adb logcat 查看日志
- Git学习笔记
- QT5入门之24 -QT 容器
- django signal 拾遗
- Leetcode 199 Binary Tree Right Side View 二叉树右视图
- Java Collections.addAll() 与 ArrayList.addAll() 的区别
- 与幼儿的沟通
- 解读:在命令情况下使用Android NDK交叉编译工具
- 使用Objective-C的文档生成工具:appledoc
- dajngo.forms.widget-Media
- spring 文件上传
- Server2008R2:由于没有远程桌面授权服务器可以提供许可证,.....错误的解决
- MySQL Replication, 主从和双主配置
- SQL中round()函数、Ucase()、Lcase()、as的用法