java 中 for 、foreach 和 迭代器 的學習筆記
阿新 • • 發佈:2019-03-27
for ,foreach 的區別如下:
1. 形式區別
對於for迴圈,我們採用:
for(int i=0;i<arr.size();i++){...}
對於foreach:
for(int i:arr){...}
對與迭代器:
Iterator it = arr.iterator(); while(it.hasNext()){ object o =it.next(); ...};
2. 條件差別
for需要知道陣列或者集合的大小,而且需要時有序的,不然無法遍歷;
foreach和iterator不需要知道陣列或者集合的大小,他們都是得到集合內的每一個元素然後進行處理;
3. 多型差別
for和foreach都需要知道自己的集合型別,甚至要知道自己集合內的元素型別,不能實現多型。這個使用的語法上都可以表示出來。
Iterator是一個介面類心,它不關心集合的類心和集合內的元素型別,因為它是通過hasnext和next來進行下一個元素的判斷和獲取,這一切都是在集合型別定義的時候就完成的事情。迭代器統一了對容器的訪問模式,這也是對介面解耦的最好表現。
4. 用法差別
for一般可以用於簡單的順序集合,並且可以預測集合的大小;
foreach可以遍歷任何集合或者陣列,但是使用者需要知道遍歷元素的型別。
iterator是最強大的,它可以隨之修改元素內部的元素。可以在遍歷的時候使用remove(); 而且iterator不需要知道元素型別和元素大小,通過hasnext()判斷是否遍歷完所有元素。 而且在對範型的集合進行遍歷的時候,iterator是不二的選擇,就是因為不需要知道元素型別便可以遍歷。