Java iterator from array

Итератор в Java

Часто вам захочется перебрать элементы коллекции. Например, для отображения каждого элемента. Самый простой способ сделать это – использовать итератор в Java, который является объектом, реализующим интерфейс Iterator или ListIterator.

Итератор позволяет циклически проходить через коллекцию, получать или удалять элементы. ListIterator расширяет Iterator, чтобы разрешить двунаправленный обход списка и модификацию элементов.

Прежде чем сможете получить доступ к коллекции через итератор, вы должны получить ее. Каждый из классов коллекции предоставляет метод iterator(), который возвращает итератор в начало коллекции. Используя этот объект итератора, вы можете получить доступ к каждому элементу в коллекции, по одному элементу за раз.

Чтобы использовать итератор для циклического просмотра содержимого коллекции, выполните следующие действия.

  • Получите итератор в начале коллекции, вызвав метод iterator() коллекции.
  • Установите цикл, который делает вызов hasNext(). Пусть цикл повторяется до тех пор, пока hasNext() возвращает true.
  • В цикле получите каждый элемент, вызвав next().

Для коллекций, которые реализуют List, вы также можете получить итератор, вызвав ListIterator.

Методы, объявленные Iterator

  1. boolean hasNext(). Возвращает true, если есть больше элементов. В противном случае возвращает false.
  2. Object next(). Возвращает следующий элемент. Выдает исключение NoSuchElementException, если следующего элемента нет.
  3. void remove(). Удаляет текущий элемент. Вызывает IllegalStateException, если была предпринята попытка вызвать метод remove(), которому не предшествует вызов next().

Методы, объявленные ListIterator

  1. void add(Object obj). Вставляет obj в список перед элементом, который будет возвращен при следующем вызове next().
  2. boolean hasNext(). Возвращает true, если есть следующий элемент. В противном случае возвращает false.
  3. boolean hasPrevious(). Возвращает true, если есть предыдущий элемент. В противном случае возвращает false.
  4. Object next(). Возвращает следующий элемент. NoSuchElementException генерируется, если нет следующего элемента.
  5. int nextIndex(). Возвращает индекс следующего элемента. Если следующего элемента нет, возвращает размер списка.
  6. Object previous(). Возвращает предыдущий элемент. NoSuchElementException генерируется, если нет предыдущего элемента.
  7. int previousIndex(). Возвращает индекс предыдущего элемента. Если предыдущего элемента нет, возвращает -1.
  8. void remove(). Удаляет текущий элемент из списка. IllegalStateException генерируется, если remove() вызывается перед вызовом next() или previous().
  9. void set (Object obj). Назначает объект текущему элементу. Этот элемент последний раз возвращается при вызове next () или previous ().

Пример

Вот пример, демонстрирующий как Iterator, так и ListIterator. Он использует объект ArrayList, но общие принципы применимы к любому типу коллекции. Конечно, ListIterator доступен только для тех коллекций, которые реализуют интерфейс List.

import java.util.*; public class IteratorDemo < public static void main(String args[]) < // Create an array list ArrayList al = new ArrayList(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) < Object element = itr.next(); System.out.print(element + " "); >System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) < Object element = litr.next(); litr.set(element + "+"); >System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) < Object element = itr.next(); System.out.print(element + " "); >System.out.println(); // Now, display the list backwards System.out.print("Modified list backwards: "); while(litr.hasPrevious()) < Object element = litr.previous(); System.out.print(element + " "); >System.out.println(); > >

Это даст следующий результат –

Читайте также:  Python requests module exceptions

Итог

Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+ Modified list backwards: F+ D+ B+ E+ A+ C+

Типы итераторов

Итераторы используются для обхода коллекций Java. Существует три типа итераторов.

  • Перечисление – Enumeration – это начальные итераторы, введенные в jdk 1.0 и предназначенные только для более старых коллекций, таких как vector или hashTables. Может использоваться только для прямой навигации. Элемент нельзя удалить с помощью перечисления.
  • Итератор – Iterator – является универсальным итератором, представленным в Jdk 1.2, может использоваться для любых коллекций и только для навигации вперед. Элемент можно удалить с помощью итератора, если метод удаления поддерживается.
  • ListIterator – является итератором для коллекций типов List и поддерживает двунаправленную навигацию.

Пример

import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Vector; public class Tester < public static void main(String[] args) throws ClassNotFoundException < Vectorvector = new Vector<>(); vector.add(1);vector.add(2);vector.add(3); System.out.println("Vector: "); Enumeration enumeration = vector.elements(); while(enumeration.hasMoreElements()) < System.out.print(enumeration.nextElement() + " "); >List list = new ArrayList(); list.add(1);list.add(2);list.add(3); System.out.println("\nList: "); Iterator iterator = list.iterator(); while(iterator.hasNext()) < System.out.print(iterator.next() + " "); >System.out.println("\nList using ListItertor (Forward): "); ListIterator listIterator = list.listIterator(); while(listIterator.hasNext()) < System.out.print(listIterator.next() + " "); >System.out.println("\nList using ListItertor (Backward): "); while(listIterator.hasPrevious()) < System.out.print(listIterator.previous() + " "); >> >

Итог

Vector: 1 2 3 List: 1 2 3 List using ListItertor (Forward): 1 2 3 List using ListItertor (Backward): 3 2 1

Средняя оценка 5 / 5. Количество голосов: 1

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Видим, что вы не нашли ответ на свой вопрос.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник

Guide to Java Iterator

Java Iterator interface is used to iterate over the elements of a Collection (List, Set or Map). The Iterator helps in retrieving the elements from the specified collection one by one and optionally performs operations over each element.

Читайте также:  Php mcrypt windows extensions

Java Iterator was first introduced in Java 1.2 as a replacement of Enumerations. Note that, except ListIterator, it doesn’t guarantee the iteration order of other collection types.

1. Introduction to Iterator

All Java collection classes provide iterator() method which returns the instance of Iterator to walk over the elements in that collection. For example, ArrayList.iterator() method returns an iterator over the elements in this ArrayList in proper sequence.

ArrayList list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); Iterator iterator = list.iterator(); while(iterator.hasNext())

The Iterator interface has 4 methods used to perform various operations:

  • This method returns true if the iteration has more elements remaining in the collection.
  • If the iterator has gone over all elements, then this method will return false .
List numbers = List.of(1, 2, 3, 4, 5); Iterator iterator = numbers.iterator(); boolean result = iterator.hasNext(); //true
  • This method returns the next element in the iteration.
  • It throws NoSuchElementException if the iteration has no more elements.
List numbers = List.of(1, 2, 3, 4, 5); Iterator iterator = numbers.iterator(); int number = iterator.next(); //1 int number = iterator.next(); //2
  • It removes from the underlying collection the last element returned by the iterator (optional operation).
  • This method can be called only once per call to next().
  • If the underlying collection is modified while the iteration is in progress in any way other than by calling remove() method, the iterator will throw an ConcurrentModificationException.
  • Iterators that do this are known as fail-fast iterators, as they fail quickly and cleanly rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.
List numbers = List.of(1, 2, 3, 4, 5); Iterator iterator = numbers.iterator(); int number = iterator.next(); //1 iterator.remove(); System.out.println(numbers); [2, 3, 4, 5]
  • This method performs the given action for each remaining element until all elements have been processed or the action throws an exception.
  • Actions are performed in the order of iteration if that order is specified.
  • It throws NullPointerException if the specified action is null.

In the following example, we have passed the lambda expression as an argument of the forEachRemaining() method.

List numbers = List.of(1, 2, 3, 4, 5); Iterator iterator = numbers.iterator(); while(iterator.hasNext()) < iterator.forEachRemaining(System.out::println); //1 2 3 4 5 >

3.1. Iterating over an ArrayList

Java example to iterate over ArrayList elements.

ArrayList list = new ArrayList<>(); Iterator iterator = list.iterator(); while(iterator.hasNext()) < String value = iterator.next(); //perform other operation on the element >

3.2. Iterating over a HashSet

Iterating over a HashSet is very similar to iterating over a List. No visible differences.

HashSet set = new HashSet<>(); Iterator iterator = set.iterator(); while(iterator.hasNext()) < String value = iterator.next(); //perform other operation on the element >

3.2. Iterating over Map Keys and Values

Читайте также:  Javascript unix time to date time

Java example to iterate over keys and values of a HashMap.

HashMap map = new HashMap<>(); //Iterating over map keys Iterator iterator = map.keys().iterator(); while(iterator.hasNext()) < String key = iterator.next(); System.out.println( "Key : " + key + ", Value : " + map.get(key) ); >//Iterating over map values Iterator iterator = map.values().iterator(); while(iterator.hasNext())

4. Convert Iterator to Stream

we can convert an iterator to a stream by first converting the iterator to Spliterator and then using StreamSupport to get stream from Spliterator.

// Iterator Iterator iterator = Arrays.asList("a", "b", "c").listIterator(); //Extra step to get Spliterator Spliterator splitItr = Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED); // Iterator -> Stream Stream stream = StreamSupport.stream(splitItr, false); // Apply stream operations stream.forEach(System.out::println);

In this tutorial, we learned the Java Iterator interface. We learned the iterator methods and simple examples to iterate over different collections such as List , Set and Map .

Drop me your questions in the comments section.

Источник

Java Iterator

An Iterator is an object that can be used to loop through collections, like ArrayList and HashSet. It is called an «iterator» because «iterating» is the technical term for looping.

To use an Iterator, you must import it from the java.util package.

Getting an Iterator

The iterator() method can be used to get an Iterator for any collection:

Example

// Import the ArrayList class and the Iterator class import java.util.ArrayList; import java.util.Iterator; public class Main < public static void main(String[] args) < // Make a collection ArrayListcars = new ArrayList(); cars.add("Volvo"); cars.add("BMW"); cars.add("Ford"); cars.add("Mazda"); // Get the iterator Iterator it = cars.iterator(); // Print the first item System.out.println(it.next()); > > 

Looping Through a Collection

To loop through a collection, use the hasNext() and next() methods of the Iterator :

Example

Removing Items from a Collection

Iterators are designed to easily change the collections that they loop through. The remove() method can remove items from a collection while looping.

Example

Use an iterator to remove numbers less than 10 from a collection:

import java.util.ArrayList; import java.util.Iterator; public class Main < public static void main(String[] args) < ArrayListnumbers = new ArrayList(); numbers.add(12); numbers.add(8); numbers.add(2); numbers.add(23); Iterator it = numbers.iterator(); while(it.hasNext()) < Integer i = it.next(); if(i < 10) < it.remove(); >> System.out.println(numbers); > >

Note: Trying to remove items using a for loop or a for-each loop would not work correctly because the collection is changing size at the same time that the code is trying to loop.

Источник

Оцените статью