Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解
這篇文章主要介紹了Java Iterator接口遍歷單列集合迭代器原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
Iterator接口概述
在程序開(kāi)發(fā)中,經(jīng)常需要遍歷集合中的所有元素。針對(duì)這種需求,JDK專(zhuān)門(mén)提供了一個(gè)接口java.util.Iterator 。 Iterator 接口也是Java集合中的一員,但它與 Collection 、 Map 接口有所不同,Collection 接口與 Map 接口主要用于存儲(chǔ)元素,而 Iterator 主要用于迭代訪問(wèn)(即遍歷) Collection 中的元素,因此 Iterator 對(duì)象也被稱(chēng)為迭代器。
迭代的概念
迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒(méi)有元素,如果有,就把這個(gè)元素取出來(lái),繼續(xù)在判斷,如果還有就再取出出來(lái)。一直把集合中的所有元素全部取出。這種取出方式專(zhuān)業(yè)術(shù)語(yǔ)稱(chēng)為迭代。
獲取迭代器
Iterator迭代器,是一個(gè)接口,我們無(wú)法直接使用,需要使用Iterator接口的實(shí)現(xiàn)類(lèi)對(duì)象,獲取實(shí)現(xiàn)類(lèi)的方式比較特殊Collection接口中有一個(gè)方法,叫iterator(),這個(gè)方法返回的就是迭代器的實(shí)現(xiàn)類(lèi)對(duì)象Iterator iterator() 返回在此 collection 的元素上進(jìn)行迭代的迭代器。
public Iterator iterator() : 獲取集合對(duì)應(yīng)的迭代器,用來(lái)遍歷集合中的元素的。
Iterator接口的常用方法如下:
public E next() :返回迭代的下一個(gè)元素
public boolean hasNext() :如果仍有元素可以迭代,則返回 true。
迭代器的使用步驟
使用集合中的方法iterator()獲取迭代器的實(shí)現(xiàn)類(lèi)對(duì)象,使用Iterator接口接收(多態(tài))
使用Iterator接口中的方法hasNext判斷還有沒(méi)有下一個(gè)元素
使用Iterator接口中的方法next取出集合中的下一個(gè)元素
代碼舉例
package demo02;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo01Iterator {
public static void main(String[] args) {
//創(chuàng)建一個(gè)集合對(duì)象
Collection coll = new ArrayList<>();
//往集合中添加元素 自動(dòng)裝箱
coll.add(1);
coll.add(2);
coll.add(3);
coll.add(4);
/*
1.使用集合中的方法iterator()獲取迭代器的實(shí)現(xiàn)類(lèi)對(duì)象,使用Iterator接口接收(多態(tài))
注意:
Iterator接口也是有泛型的,迭代器的泛型跟著集合走,集合是什么泛型,迭代器就是什么泛型
*/
//多態(tài) 接口 實(shí)現(xiàn)類(lèi)對(duì)象
Iterator it = coll.iterator();
//2.使用Iterator接口中的方法hasNext判斷還有沒(méi)有下一個(gè)元素
while (it.hasNext()) {
//3.使用Iterator接口中的方法next取出集合中的下一個(gè)元素
System.out.println(it.next());
}
}
}
代碼執(zhí)行后的結(jié)果
tips:在進(jìn)行集合元素取出時(shí),如果集合中已經(jīng)沒(méi)有元素了,還繼續(xù)使用迭代器的next方法,將會(huì)發(fā)生java.util.NoSuchElementException沒(méi)有集合元素的錯(cuò)誤。
迭代器的實(shí)現(xiàn)原理
當(dāng)遍歷集合時(shí),首先通過(guò)調(diào)用Collection集合的iterator()方法獲得迭代器對(duì)象,然后使用hashNext()方法判斷集合中是否存在下一個(gè)元素,如果存在,則調(diào)用next()方法將元素取出,否則說(shuō)明已到達(dá)了集合末尾,停止遍歷元素。Iterator迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來(lái)跟蹤集合中的元素,為了讓初學(xué)者能更好地理解迭代器的工作原理,接下來(lái)通過(guò)一個(gè)圖例來(lái)演示Iterator對(duì)象迭代元素的過(guò)程:
在調(diào)用Iterator的next方法之前,迭代器的索引位于第一個(gè)元素之前,不指向任何元素,當(dāng)?shù)谝淮握{(diào)用迭代器的next方法后,迭代器的索引會(huì)向后移動(dòng)一位,指向第一個(gè)元素并將該元素返回,當(dāng)再次調(diào)用next方法時(shí),迭代器的索引會(huì)指向第二個(gè)元素并將該元素返回,依此類(lèi)推,直到hasNext方法返回false,表示到達(dá)了集合的末尾,終止對(duì)元素的遍歷。
增強(qiáng)for
增強(qiáng)for循環(huán)(也稱(chēng)for each循環(huán))是JDK1.5以后出來(lái)的一個(gè)高級(jí)for循環(huán),專(zhuān)門(mén)用來(lái)遍歷數(shù)組和集合的。它的內(nèi)部原理其實(shí)是個(gè)Iterator迭代器,所以在遍歷的過(guò)程中,不能對(duì)集合中的元素進(jìn)行增刪操作。 為什么集合和數(shù)組都可以使用增強(qiáng)for循環(huán)進(jìn)行遍歷?因?yàn)閷?shí)現(xiàn)了只要實(shí)現(xiàn)了Iterable接口就允許對(duì)象成為 "foreach" 語(yǔ)句的目標(biāo)。而Collectionextends Iterable這個(gè)接口,所以所有的單列集合都可以使用增強(qiáng)for。
作用:
它用于遍歷Collection和數(shù)組。通常只進(jìn)行遍歷元素,不要在遍歷的過(guò)程中對(duì)集合元素進(jìn)行增刪操作。
格式:
代碼舉例
遍歷數(shù)組
package demo02Iterator;
public class ForArray {
public static void main(String[] args) {
int[] arr = {3, 5, 6, 87};
//使用增強(qiáng)for遍歷數(shù)組
for (int a : arr) {//a代表數(shù)組中的每個(gè)元素
System.out.print(a + " ");//3 5 6 87
}
}
}
遍歷集合
package demo02Iterator;
import java.util.ArrayList;
import java.util.Collection;
public class ForArrayList {
public static void main(String[] args) {
//遍歷集合
Collection coll = new ArrayList();
coll.add("小河神");
coll.add("老河神");
coll.add("神婆");
//使用增強(qiáng)for遍歷
for (String s : coll) {
//接收變量s代表 代表被遍歷到的集合元
System.out.print(s + " ");//小河神 老河神 神婆
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html 纵向选项卡,竖直选项卡式面板的
- 下一篇: android webview 字体 系