参考大飞博客
http://brokendreams.iteye.com/blog/1913619
batchRemove方法
-
private boolean batchRemove(Collection c, boolean complement) {
-
final Object[] elementData = this.elementData;
-
int r = 0, w = 0;
-
boolean modified = false;
-
try {
-
for (; r < size; r++)
-
if (c.contains(elementData[r]) == complement)
-
elementData[w++] = elementData[r];
-
} finally {
-
-
-
if (r != size) {
-
System.arraycopy(elementData, r,
-
elementData, w,
-
size - r);
-
w += size - r;
-
}
-
if (w != size) {
-
-
for (int i = w; i < size; i++)
-
elementData[i] = null;
-
modCount += size - w;
-
size = w;
-
modified = true;
-
}
-
}
-
return modified;
-
}
这个方法是内部方法,就是批量删除.
加一些调试信息.
-
import java.util.*;
-
-
-
-
-
public class App {
-
public static void main(String[] args) {
-
-
List l=new ArrayList();
-
l.add(3);
-
l.add(8);
-
batchRemove(l,true);
-
}
-
-
private static boolean batchRemove(Collection c, boolean complement) {
-
final Integer[] elementData = new Integer[]{1,2,3,4,5,6,7,8,9,10};
-
int size=elementData.length;
-
int r = 0, w = 0;
-
boolean modified = false;
-
try {
-
for (; r < size; r++) {
-
System.out.print("r:"+r+".."+"w:"+w+"..");
-
for (Integer i : elementData) {
-
System.out.print("," + i);
-
}
-
System.out.print("\n");
-
if (c.contains(elementData[r]) == complement) {
-
elementData[w++] = elementData[r];
-
}
-
}
-
} finally {
-
-
-
if (r != size) {
-
System.arraycopy(elementData, r,
-
elementData, w,
-
size - r);
-
w += size - r;
-
}
-
if (w != size) {
-
-
for (int i = w; i < size; i++)
-
elementData[i] = null;
-
size = w;
-
modified = true;
-
}
-
}
-
for(Integer i:elementData){
-
System.out.println("Data:"+i);
-
}
-
System.out.println("Size:"+size);
-
return modified;
-
}
-
}
r:0..w:0..,1,2,3,4,5,6,7,8,9,10
r:1..w:0..,1,2,3,4,5,6,7,8,9,10
r:2..w:0..,1,2,3,4,5,6,7,8,9,10
r:3..w:1..,3,2,3,4,5,6,7,8,9,10
r:4..w:1..,3,2,3,4,5,6,7,8,9,10
r:5..w:1..,3,2,3,4,5,6,7,8,9,10
r:6..w:1..,3,2,3,4,5,6,7,8,9,10
r:7..w:1..,3,2,3,4,5,6,7,8,9,10
r:8..w:2..,3,8,3,4,5,6,7,8,9,10
r:9..w:2..,3,8,3,4,5,6,7,8,9,10
Data:3
Data:8
Data:null
Data:null
Data:null
Data:null
Data:null
Data:null
Data:null
Data:null
Size:2
试试将complement改为false
batchRemove(l,false);
r:0..w:0..,1,2,3,4,5,6,7,8,9,10
r:1..w:1..,1,2,3,4,5,6,7,8,9,10
r:2..w:2..,1,2,3,4,5,6,7,8,9,10
r:3..w:2..,1,2,3,4,5,6,7,8,9,10
r:4..w:3..,1,2,4,4,5,6,7,8,9,10
r:5..w:4..,1,2,4,5,5,6,7,8,9,10
r:6..w:5..,1,2,4,5,6,6,7,8,9,10
r:7..w:6..,1,2,4,5,6,7,7,8,9,10
r:8..w:6..,1,2,4,5,6,7,7,8,9,10
r:9..w:7..,1,2,4,5,6,7,9,8,9,10
Data:1
Data:2
Data:4
Data:5
Data:6
Data:7
Data:9
Data:10
Data:null
Data:null
Size:8
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2120733/
,如需转载,请注明出处,否则将追究法律责任。