import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static class MegaClass {
public final int id;
public final String name;
public MegaClass(int id) {
this.id = id;
this.name = "my name is " + id;
}
}
private static boolean isRetained(final MegaClass o, final int qq) {
return (o.id % qq) == 0;
}
private static List<MegaClass> getList(int size) {
List<MegaClass> rs = new ArrayList<MegaClass>();
for (int i = 0; i < size; ++i) {
rs.add(new MegaClass(i));
}
return rs;
}
private static List<MegaClass> filterOne(List<MegaClass> list, final int qq) {
for (MegaClass mc: list.toArray(new MegaClass[] {})) {
if (!isRetained(mc, qq)) {
list.remove(mc);
}
}
return list;
}
private static List<MegaClass> filterTwo(List<MegaClass> list, final int qq) {
for (Iterator<MegaClass> i = list.iterator(); i.hasNext();) {
if (!isRetained(i.next(), qq)) {
i.remove();
}
}
return list;
}
private static List<MegaClass> filterThree(List<MegaClass> list, final int qq) {
List<MegaClass> rs = new ArrayList<MegaClass>();
for (MegaClass mc: list) {
if (isRetained(mc, qq)) {
rs.add(mc);
}
}
return rs;
}
public static void main(String[] args) {
final int listSize = 100500;
for (int qq = 1; qq < 5; ++qq) {
System.out.println("qq = " + qq);
long t = System.currentTimeMillis();
List<MegaClass> dummy1 = filterOne(getList(listSize), qq);
System.out.println("dt one: " + (System.currentTimeMillis() - t) + " ms " + dummy1.size());
t = System.currentTimeMillis();
List<MegaClass> dummy2 = filterTwo(getList(listSize), qq);
System.out.println("dt two: " + (System.currentTimeMillis() - t) + " ms " + dummy2.size());
t = System.currentTimeMillis();
List<MegaClass> dummy3 = filterThree(getList(listSize), qq);
System.out.println("dt three: " + (System.currentTimeMillis() - t) + " ms " + dummy3.size());
}
}
}