for ,foreach 的區別以下:數組
1. 形式區別接口
對於for循環,咱們採用:rem
for(int i=0;i<arr.size();i++){...}
對於foreach:it
for(int i:arr){...}
對與迭代器:for循環
Iterator it = arr.iterator(); while(it.hasNext()){ object o =it.next(); ...};
2. 條件差異容器
for須要知道數組或者集合的大小,並且須要時有序的,否則沒法遍歷;object
foreach和iterator不須要知道數組或者集合的大小,他們都是獲得集合內的每個元素而後進行處理;foreach
3. 多態差異循環
for和foreach都須要知道本身的集合類型,甚至要知道本身集合內的元素類型,不能實現多態。這個使用的語法上均可以表示出來。遍歷
Iterator是一個接口類心,它不關心集合的類心和集合內的元素類型,由於它是經過hasnext和next來進行下一個元素的判斷和獲取,這一切都是在集合類型定義的時候就完成的事情。迭代器統一了對容器的訪問模式,這也是對接口解耦的最好表現。
4. 用法差異
for通常能夠用於簡單的順序集合,而且能夠預測集合的大小;
foreach能夠遍歷任何集合或者數組,可是使用者須要知道遍歷元素的類型。
iterator是最強大的,它能夠隨之修改元素內部的元素。能夠在遍歷的時候使用remove(); 並且iterator不須要知道元素類型和元素大小,經過hasnext()判斷是否遍歷完全部元素。 並且在對範型的集合進行遍歷的時候,iterator是不二的選擇,就是由於不須要知道元素類型即可以遍歷。