一消痛、前言
在迭代器(Iterator)沒有出現(xiàn)之前泉瞻,如果要遍歷數(shù)組和集合洋腮,需要使用方法。
數(shù)組遍歷镀脂,代碼如下:
String[] arr = new String[]{"Java", "Java虛擬機", "Java中文社群"};
for (int i = 0; i < arr.length; i++) {
String item = arr[i];
}
集合遍歷,代碼如下:
List<String> list = new ArrayList<String>() {{
add("Java");
add("Java虛擬機");
add("Java中文社群");
}};
for (int i = 0; i < list.size(); i++) {
String item = list.get(i);
}
而迭代器的產(chǎn)生忘伞,就是為不同類型的容器遍歷薄翅,提供標(biāo)準(zhǔn)統(tǒng)一的方法沙兰。
迭代器遍歷,代碼如下:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
// do something
}
總結(jié):使用了迭代器就可以不用關(guān)注容器的內(nèi)部細(xì)節(jié)翘魄,用同樣的方式遍歷不同類型的容器鼎天。
二、迭代器介紹
迭代器是用來遍歷容器內(nèi)所有元素對象的暑竟,也是一種常見的設(shè)計模式斋射。
迭代器包含以下四個方法:
- hasNext() :boolean —— 容器內(nèi)是否還有可以訪問的元素。
- next() :E —— 返回下一個元素但荤。
- remove() :void —— 刪除當(dāng)前元素罗岖。
- forEachRemaining(Consumer) :void —— JDK 8 中添加的,提供一個 lambda 表達(dá)式遍歷容器元素腹躁。
迭代器使用如下:
List<String> list = new ArrayList<String>() {{
add("Java");
add("Java虛擬機");
add("Java中文社群");
}};
Iterator iterator = list.iterator();
// 遍歷
while (iterator.hasNext()){
String str = (String) iterator.next();
if (str.equals("Java中文社群")){
iterator.remove();
}
}
System.out.println(list); // [Java, Java虛擬機]
forEachRemaining 使用如下:
List<String> list = new ArrayList<String>() {{
add("Java");
add("Java虛擬機");
add("Java中文社群");
}};
// forEachRemaining 使用
list.iterator().forEachRemaining(item -> System.out.println(item));