1.首先增強(qiáng)for循環(huán)和iterator遍歷的效果是一樣的,也就說(shuō)增強(qiáng)for循環(huán)的內(nèi)部也就是調(diào)用iteratoer實(shí)現(xiàn)的,
但是增強(qiáng)for循環(huán)有些缺點(diǎn),例如不能在增強(qiáng)循環(huán)里動(dòng)態(tài)的刪除集合內(nèi)容。不能獲取下標(biāo)等。 2.ArrayList由于使用數(shù)組實(shí)現(xiàn),因此下標(biāo)明確,最好使用普通循環(huán)。 3.而對(duì)于LinkedList 由于獲取一個(gè)元素,要從頭開始向后找,因此建議使用增強(qiáng)for循環(huán),也就是iterator。 下面的例子可以證明
package com.ljq.test;
import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
/** * 增強(qiáng)for循環(huán)用法 * * @author jiqinlin * */ public class ForTest {
public static void main(String[] args) { //List<Integer> list = new ArrayList<Integer>(); List<Integer> list = new LinkedList<Integer>(); for (int i = 0; i < 50000; i++) { list.add(11); }
int resutl = 0; long start = System.currentTimeMillis(); for (int i = 0; i < list.size(); i++) { resutl = list.get(i); } System.out.println("普通循環(huán)使用了"+ (System.currentTimeMillis() - start)+"毫秒");
start = System.currentTimeMillis(); for (int c2 : list) { } System.out.println("增強(qiáng)for循環(huán)使用了"+ (System.currentTimeMillis() - start)+"毫秒"); }
}
使用ArrayList運(yùn)行結(jié)果如下
把ArrayList改為L(zhǎng)inkedList,我這里內(nèi)存溢出了,運(yùn)行結(jié)果如下
于是list改成50000,運(yùn)行結(jié)果如下
所以在使用的時(shí)候適當(dāng)選擇就好了
|