Java如何将两个数组的元素按顺序合并
2012-07-30 18:06
316 查看
日记里面的老文章了,贴csdn里面方便查看。使用java的ArrayList 的时候,如何将两个数组按顺序合并。考虑问题的角度不同,解决办法就不一样。例如ArrayList a 和b ,合并之后为 a1 a2 b1 b21,以a为主数组的话,解决办法很简单。 for循环遍历。和 a.addAll(b)2, 如果以b为主数组的话,问题就有点复杂了。 解决办法是 倒序遍历数组a,b.add(0, a)所以我们解决问题的时候,如果某个想法有点复杂的话,那么可能是你站的角度的问题。换个角度问题就拨云见日了。
for循环和addAll效率问题
对于答案1,引出了一个问题。for循环和addAll那个更高效。
1,在小数据量时,for循环效率高,大数据量时addAll方法效率高:原因如下:ArrayList的addAll的实现为: public boolean addAll(Collection<? extends E> c) {Object[] a = c.toArray();int numNew = a. length; ensureCapacity( size + numNew); // Increments modCountSystem. arraycopy(a, 0, elementData, size, numNew);size += numNew;return numNew != 0;}很显然。。在拷贝数组时使用了arraycopy 这个方法。这个方法是使用拷贝内存的做法 ,效率比遍历数组块很多。arraycopy的定义是这样的public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length); native关键字的意思是 这个函数的源码在JDK中没有的。但是他调用的是本地函数,这个函数是C,或者C++写完的,编译成DLL。 java调用。所以效率比较高。首先找到数据源 然后将该段内存拷贝。 但是如果需要多次遍历,那么addAll还是在性能上会获取优势的. .下面是网上的一个测试 在20组数据时 还是 for效率高,但是在大数据量的时候 arraycopy 方法就明显占优势了。http://www.exam8.com/computer/djks/dj2/Java/ziliao/200810/1314435.html 常见错误用法:1,忘记new初始化对象// 一些朋友在向循环里向列表增加对象的时候 // 经常忘记new初始化,造成最终加入的都是同一个对象 List<MyObject> list = new ArrayList<MyObject>(); MyObject obj = new MyObject(); for (int i = 1; i <= 5; i++) { obj.setName("Name" + i); list.add(obj); } // 里面的数据都是最后一个 showList(list); // [Name5, Name5, Name5, Name5, Name5]
2,忘记ArrayList初始化3,遍历的时候删除数据参考:http://www.cnblogs.com/youxin/archive/2012/07/19/2599382.htmlhttp://blog.csdn.net/sutaizi/article/details/6607123
相关文章推荐
- Java中如何把两个数组合并为一个
- 算法-Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- JAVA合并两个有序数组并去除重复元素。
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个(已验证有效)
- java中两个byte数组如何合并?
- Java中如何把两个数组合并为一个
- Java中如何比较两个数组中元素是否相同
- Java中如何把两个数组合并为一个
- Java中如何把两个数组合并为一个
- java里如何实现两个等长度的字符串数组有多少个元素相同(从最左边开始,一旦遇到不同元素则跳出计数)
- 合并两个有序数组Java实现
- 谈JAVA中如何将两个byte数组合成一个数组
- java 两个相同元素的List,合并排序去除重复元素的快速算法