CodeGym/Java блог/Случаен/Итератор на Java
John Squirrels
Ниво
San Francisco

Итератор на Java

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

Какво е итератор в Java

Какво е итератор в Java? Това е начин за разглеждане на всеки елемент в колекция. И под колекция имаме предвид всичко в класа Collection . Това включва:
  • ArrayList
  • HashSet
  • LinkedHashSet
  • LinkedList
  • PriorityQueue
  • вектор
  • и много други…
Той също така включва различните интерфейси за тези класове, като Set , List , Queue , Dequeue и Sorted Set , за да назовем само няколко. Iterator<E> е публичният интерфейсен метод на класа Interface Iterator<E> . Той беше въведен в Java 1.2 и замени изброяването като начин за изследване на последователни елементи в колекция.

Защо не трябва да използвате 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
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари