public class LoopTest {
private List<String> arrayList = new ArrayList<String>();
private List<String> linkedList = new LinkedList<String>();
@Before
public void initList() {
for (int i = 0; i < 100000; i++) {
arrayList.add(i + "");
linkedList.add(i + "");
}
}
public void testIterator() {
System.out.println("====arraylist iterator====");
Iterator<String> itor = arrayList.iterator();
long beforeTime = System.currentTimeMillis();
while (itor.hasNext()) {
String temp = "";
temp += itor.next();
}
printTime(beforeTime);
}
public void testFor() {
System.out.println("====arraylist for====");
long beforeTime = System.currentTimeMillis();
for (int i = 0; i < arrayList.size(); i++) {
String temp = "";
temp += arrayList.get(i);
}
printTime(beforeTime);
}
public void testEnhancedFor() {
System.out.println("====arraylist enhanced for====");
long beforeTime = System.currentTimeMillis();
for (String str : arrayList) {
String temp = "";
temp += str;
}
printTime(beforeTime);
}
public void testLinkedEnhancedFor() {
System.out.println("====linkedlist enhanced for====");
long beforeTime = System.currentTimeMillis();
for (String str : linkedList) {
String temp = "";
temp += str;
}
printTime(beforeTime);
}
public void testLinkedFor() {
System.out.println("====linkedlist for====");
long beforeTime = System.currentTimeMillis();
for (int i = 0; i < linkedList.size(); i++) {
String temp = "";
temp += linkedList.get(i);
}
printTime(beforeTime);
}
public void testLinkedEnhanscedForRemove() {
System.out.println("====linkedlist enhanced for1====");
long beforeTime = System.currentTimeMillis();
for (Iterator<String> itor = linkedList.iterator(); itor.hasNext();) {
linkedList.remove(itor.next());
}
printTime(beforeTime);
}
public void testLinkedIterator() {
System.out.println("====linkedlist iterator====");
Iterator<String> itor = linkedList.iterator();
long beforeTime = System.currentTimeMillis();
while (itor.hasNext()) {
String temp = "";
temp += itor.next();
}
printTime(beforeTime);
}
public void testLinkedIteratorRemove() {
System.out.println("====linkedlist iterator====");
Iterator<String> itor = linkedList.iterator();
long beforeTime = System.currentTimeMillis();
while (itor.hasNext()) {
linkedList.remove(itor.next());
}
printTime(beforeTime);
}
@Test
public void testResult() {
testIterator();
testEnhancedFor();
testFor();
testLinkedIterator();
testLinkedEnhancedFor();
testLinkedFor();
// testLinkedEnhanscedForRemove();
// testLinkedIteratorRemove();
}
public void printTime(long beforeTime) {
System.out.println("it cost "
+ (System.currentTimeMillis() - beforeTime) + " ms");
}
}
测试结果:
====arraylist iterator====
it cost 43 ms
====arraylist enhanced for====
it cost 28 ms
====arraylist for====
it cost 34 ms
====linkedlist iterator====
it cost 35 ms
====linkedlist enhanced for====
it cost 17 ms
====linkedlist for====
it cost 49319 ms
增强for循环的速度最快
在LinkedList中,由于其底层由链表实现,在get(int index)方法中,仍然是线性查找,每查找一个元素都要遍历之前的一些指针域,所以Iterator比for快
但是增强for和Iterator中都不能使用remove(Object o)方法。