Java 中的 Iterator 和 Iterable 介面
- Java 中 Iterator 和 Iterable 的區別
- Java 中迭代器的實現
- Java 中的自定義 Iterable 和 Iterator
- Java 中解決的 Iterator 和 Iterable
可迭代物件就像倉庫中的貨物集合,而迭代器是該倉庫的管理員。
可能不知道有多少產品?因此,有人可能會問迭代器,你有沒有這個專案?
Java 中 Iterator 和 Iterable 的區別
Iterator 和 iterable 是物件的集合。這些與陣列和包裝器沒有任何不同。
不過,這兩種方法都會覆蓋它們,以允許你以最適合你要求的方式繼承物件。
物件可以針對可迭代介面中的擴充套件 for
語句,通常稱為 for each
迴圈。它的型別引數是 <T>
,指定 iterator<>
返回的元素的型別。
語法:
public class IteratorAndIterable<T> implements Iterable<T> {}
iterator<>
返回迭代器 <T>
元素的例項。
它也是一個物件、一個收集器,或者只是一個介面。以下引數將進一步處理返回的例項。
引數:
hasNext();
:如果迭代有其他元素,則返回 true。next();
:該方法返回迭代中的下一個元素。remove();
:刪除此迭代器從基礎集合返回的最終元素。
語法:
// Custom Iterator
public class myCustomiterator<T> implements Iterator<T> {
// hasNext()
public boolean hasNext() {
// your code goes here
return false;
}
// next()
public E next() {
// your code goes here
return false;
}
}
Java 中迭代器的實現
我們將從陣列列表中動態生成一個 iterator<>
,向你展示如何遍歷每個元素。
程式碼:
import java.util.*;
// Main class
public class ExplainIterator {
public static void main(String[] args) {
ArrayList<String> demolist = new ArrayList<String>();
demolist.add("Here");
demolist.add("Is");
demolist.add("Iterator");
demolist.add("Demo");
/*
* Now, we are going to dynamically generate Iterator from the Arrays List for
* traversing each element
*/
/*
* Iterator method has two parameters: hasNext() and next(). The hasNext()
* returns boolean (true or false). While the next() method returns next
* complete token (it hasNext() gave it one).
*/
Iterator<String> demo = demolist.iterator();
while (demo.hasNext()) {
System.out.println(demo.next());
}
// Iterator method
}
// main function
}
// main class
在這個例子中,iterator<>
方法討論了兩個引數,hasNext()
和 next()
,工作得非常好。
hasNext()
返回 true。而 next()
方法返回完整的令牌,因為 hasNext()
給了它一個。
最後,我們將索引從 iterator<>
中迴圈出來。
輸出:
Here
Is
Iterator
Demo
Java 中的自定義 Iterable 和 Iterator
你還記得這些概念的真例項子嗎?如果是,那麼現在是實施這些方法的時候了。
在 Java 中,你必須使用帶有可迭代物件的迭代器。你的 iterable<>
集合必須在其迭代器的幫助下返回一個特定物件。
你將在以下程式碼塊中準確瞭解它的全部內容。
IteratorAndIterable.java
:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// You will inherit it
// Define Custom Iterable
public class IteratorAndIterable<T> implements Iterable<T> {
// An array list (setL: setlist)
private List<T> setL = new ArrayList<>();
// Get value from the List
public void add(T getback) {
setL.add(getback);
}
// Define Iterator to get your iterable objects
public Iterator<T> iterator() {
return new myCi<T>(setL);
}
// Your custom iterator overrides Iterator
public class myCi<E> implements Iterator<E> {
// For a condition to avoid exception later
int SP = 0;
// Custom Array List
List<E> CAL;
public myCi(List<E> CAL) {
this.CAL = CAL;
}
// Check the iterator values
public boolean hasNext() {
if (CAL.size() >= SP + 1) {
// Remember SP = 0? To avoid exception
// If hasNext() has value, it returns true
return true;
}
return false;
}
// Use next() to get the token that hasNext() just passed
// No need to use default values, make use of the your custom <E>
public E next() {
// Get token and store it into getback
E getback = CAL.get(SP);
// You can do anything with this loop now
SP++;
// return getback instead of deafault value (Now check line number 122) It will be clear
return getback;
}
public void remove() {}
}
}
Java 中解決的 Iterator 和 Iterable
這段程式碼逐步解釋了每一行程式碼。請檢查評論。我們擴充套件了一個 Iterable<>
並建立了我們自己的。
後來,我們在 iterable<>
中建立了一個 iterator<>
並完全覆蓋了我們希望它的行為方式。
迭代器的 hasNext()
通過 next()
傳遞,我們的自定義列表已準備好選擇它。
現在我們將建立一個簡單的類來定義一個陣列列表。然後我們將向你展示如何從該程式碼塊中獲取可迭代物件並在下一個中列印它。
hasNext()
傳遞的 next()
獲取條目/令牌,從自定義迭代器使用自定義迭代器進行迭代。ExecuteIterable.java
:
// Get object from the iterable
public abstract class ExecuteIterable {
public static void main(String[] args) {
// Your former class of custom Iterable and Iterator
IteratorAndIterable<String> Lst = new IteratorAndIterable<>();
// Valuse
Lst.add("EAST");
Lst.add("WEST");
Lst.add("NORTH");
Lst.add("SOUTH");
// For each loop to extract values from the iterator
for (String indx : Lst) {
// Print
System.out.println(indx);
}
}
}
輸出:
EAST
WEST
NORTH
SOUTH
Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.
LinkedIn