здрасти В днешния урок ще говорим за Java Iterator. Представете си, че отивате в библиотеката и искате да намерите определена книга. Как го правиш? Ако не е художествена литература, има десетичната система на Дюи. Ако е художествена литература, те са подредени по азбучен ред по фамorята им. Каквото и да търсите, в даден момент трябва да прегледате книгите една по една, докато намерите това, което търсите. Всеки път, когато имате колекция от неща в Java, независимо дали се съхраняват в Array , ArrayList , Queue or List , How намирате определена стойност? В даден момент трябва да преминете през всеки елемент един по един. Ето за Howво служи итераторът на Java.

Какво е итератор в Java
Какво е итератор в Java? Това е начин за разглеждане на всеки елемент в колекция. И под колекция имаме предвид всичко в класа Collection . Това включва:- ArrayList
- HashSet
- LinkedHashSet
- LinkedList
- PriorityQueue
- вектор
- и много други…
Защо не трябва да използвате For Loops като итератор в Java
Един от първите начини, по които всеки е научен да итерира през колекция в Java, е за цикъл. Изглежда така:
class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
Резултатът ще бъде списък, който гласи:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Това наистина има своите applications, но Howво се случва, ако колекцията не съхранява елементи в базирана на индекс система? Например Set s обикновено няма ред. Така че е препоръчително да се откажете от практиката на използване на for цикъл като итератор в Java и instead of това да практикувате използването на класа Iterator<E> . Ето някои примери за итератори на Java.
Как да използвате Iterator в Java
Ето някои примери за това How да използвате итератор в Java. Когато използвате класа итератор, има три начина за преминаване през колекция. Можете да използвате цикъл while() , цикъл for() и цикъл forEach() . Имайте предвид, че този for цикъл е различен от този, за който говорихме преди. Ето трите различни примера за итератор на Java. Първо, нека настроим колекцията , през която да итерирате.
import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
Това е проста колекция , съставена от ArrayList , в която заредихме четири елемента. Сега нека разгледаме трите метода за използване на класа Iterator за обхождане на ArrayList .
Цикъл while().
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
Този цикъл while() използва булевия метод .hasNext() на класа Iterator , за да провери дали има бъдещ елемент. Ако предварителното condition е вярно, то продължава. Ако се върне като false, цикълът приключва. Ключовата част тук е, че методите .hasNext() и .next() извършват първоначална проверка на първия елемент. Ако колекцията е празна и няма първи елемент, тогава методът връща false за .hasNext() и ще хвърли NoSuchElementException за .next() метода.
За цикъл
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
Това изглежда като по-традиционен for цикъл. Той използва метода .hasNext() като част за проверка и промяна на conditionто. Инициализацията е извикването на итератора.
За: Всеки цикъл
for (String s : example) {
System.out.println("Element Value= " + s);
}
Цикълът For:Each е for цикъл, но ако не знаете How да го прочетете, може да е малко объркващо. Синтаксисът на For:Each цикъл е for (data_type variableName : collectionName){ body} . Този for:every цикъл наистина има няколко недостатъка. Първо, той може да обхожда колекцията само в една посока. Второ, трябва да преминете през всеки елемент. Не можете да пропуснете нито един от тях. Но като удобен итератор на списък в Java, това е най-добрият вариант. Положителната страна е, че цикълът for:each е много лесен за четене и след като го знаете, е трудно да сгрешите. Ако се чудите Howъв е резултатът от трите цикъла на итератора, всички те са еднакви:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
Как да използвате итератор в Java за карти
Картите са популярен начин за съхраняване на данни, но тъй като те не разширяват Collection , не можете да използвате предишните итератори за директно преминаване през карта. И така, How използвате итератор в Java, за да преминете през Map s и HashMap s? Има четири добри метода за итератор на карта на Java. Ще ги разгледаме поотделно. Първо, нека заредим карта със серия от стойности.
import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
Метод на итератора на Java Hashmap: forEach(действие)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Този метод използва ламбда израз за итерация. Ламбда операторът е методът forEach() , а тялото отпечатва стойностите. Това използва оператор с множество параметри. Това е най-бързият и чист метод за итератор на карта в Java 8.
Метод на Java Hashmap итератор: For:Each() Loop
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Това използва синтаксиса For:Each за извикване на метода entrySet() за връщане на набор, който има ключа и стойността като свои елементи. Освен това, когато използвате метода .Entry() , обектите са верни само докато се извършва тази итерация.
Метод на Java Hashmap Iterator: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
Този метод отново преобразува картата в набор за използване на итератора на колекциите и методите. За тези три итераторни метода връщането изглежда така:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
Този връща елементите по различен начин. Първо ще върне всички ключове по ред и след това всички стойности:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
GO TO FULL VERSION