将一个List追加到另一个List中
来源:互联网 发布:qq动态头像软件 编辑:程序博客网 时间:2024/06/05 19:40
ListA 里面有 1 2 3
ListB里面有 4 5 6
让ListA变成 1 2 3 4 5 6
可以用for循环遍历来添加,也可以使用addAll方法。
addAll方法感觉代码更简洁,批量操作效率应该高些。但是数据量不多时,感觉反而效率更慢。
我表示很费解,于是查阅了资料。
得出以下结论:
在小数据量时,for循环效率高,大数据量时addAll方法效率高:
原因如下:
ArrayList的addAll的实现为:
- public boolean addAll(Collection c) {
- Object[] a = c.toArray();
- int numNew = a.length;
- ensureCapacity(size + numNew); // Increments modCount
- System.arraycopy(a, 0, elementData, size, numNew);
- size += numNew;
- return numNew != 0;
- }
很显然。。在拷贝数组时使用了
arraycopy 这个方法。这个方法是使用拷贝内存的做法 ,效率比遍历数组块很多。
首先找到数据源 然后将该段内存拷贝。
当然值得注意的是,这个函数中还使用了toArray方法,这个方法是 要遍历操作的
但是如果需要多次遍历,那么addAll还是在性能上会获取优势的. .
下面是网上的一个测试 在20组数据时 还是 for效率高,但是在大数据量的时候 arraycopy 方法就明显占优势了。
http://www.exam8.com/computer/djks/dj2/Java/ziliao/200810/1314435.htmlhttp://www.exam8.com/computer/djks/dj2/Java/ziliao/200810/1314435.html
另外:
arraycopy的定义是这样的
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length);
native关键字的意思是 这个函数的源码在JDK中没有的。但是他调用的是本地计算机中的函数
这个函数是C,或者C++写完的,编译成DLL。 java调用。所以效率比for循环要块。
综上所述 :为什么在大数据量时使用addall方法效率快?
1.使用内存拷贝,移动数据。
2.本地函数,执行效率高。
那小数据量时呢?
以上2点都不明显,并且首先要调用toArray方法,在小数据量时,效果没有for来的好。
- 将一个List追加到另一个List中
- 将一个list的值存放到另一个list中去
- JAVA将一个list里的数据复制到另一个list中
- 将一个List中的值遍历出来放到另一个List中
- java将一个List赋值给另一个List相关问题
- java将一个List赋值给另一个List相关问题
- java将一个List赋值给另一个List相关问题
- java将一个List赋值给另一个List相关问题
- 将List集合转换List数组,将List数组转换为String数组,将String字符串放到String数组中,将一个数组赋值给另一个数组
- List中元素转存到另一个空List中的快捷方式
- 将一个文本里的信息,读入到 list 中
- Python将一个CSV文件里的数据追加到另一个CSV文件
- 将DataReader读取到List中
- 将List数据保存到Excel中
- 将结果集封装到List中
- 将list数据写入到txt中
- 将同一个list对象中具有相同属性的对象放入到一个新的list中
- 微分享-快速高效的从一个list转化到另一个list
- 彩色图像抖动简介
- 学习JavaScript数据结构与算法(六)——字典
- AFNetworking知识点之AFURLSessionManager
- 用matplotlib实现数据可视化之线形图(函数)
- 关于建立tensorflowOnspark时候,需要做的环境搭建,看如下链接的文章
- 将一个List追加到另一个List中
- the password has expired
- Python学习笔记(五):文件和异常
- 递归
- 【机器学习实战】第8章 预测数值型数据:回归
- 设计模式java版文摘
- WPF设置图片路径
- 延迟加载
- (三)虚拟化技术重点笔记与总结