Рубрики
Без рубрики

Итератор Java – Итератор на Java

В этом посте мы обсудим некоторые основы перечисления Java и углубленное обсуждение итератора Java. Поскольку интерфейс перечисления Java является

Автор оригинала: Pankaj Kumar.

В этом посте мы обсудим некоторые основы перечисления Java и углубленное обсуждение итератора Java. Поскольку интерфейс перечисления Java устарел, не рекомендуется использовать его в наших приложениях.

Опубликуйте Краткое содержание

В этом посте мы обсудим следующие концепции итератора Java.

  • Четыре курсора Java
  • Ограничения перечисления Java
  • Итератор Java
  • Диаграмма классов итераторов Java
  • Методы итератора Java
  • Базовый пример итератора Java
  • Разработка Итератора Пользовательского Класса
  • Как Итератор Java Работает Внутренне?
  • Преимущества итератора Java
  • Ограничения итератора Java
  • Сходство между перечислением Java и итератором
  • Различия между перечислением Java и итератором

Четыре курсора Java

Прежде всего, я хотел бы определить, что такое курсор Java? Курсор Java-это итератор, который используется для итерации, обхода или извлечения элементов коллекции или объекта потока по одному.

Java поддерживает следующие четыре различных курсора.

  • Перечисление
  • Итератор
  • Листератор
  • Разделитель

У каждого курсора Java есть свои преимущества и недостатки. Мы обсудим некоторые основы перечисления и полную информацию об итераторе в этих сообщениях. Мы обсудим список и разделитель в моих следующих постах.

Ограничения перечисления Java

Перечисление Java доступно с Java 1.0, имеет множество ограничений и не рекомендуется использовать в новых проектах.

  • Он доступен начиная с Java 1.0 и устаревшего интерфейса.
  • Это полезно только для устаревших классов коллекции.
  • По сравнению с другими курсорами, у него очень длинные имена методов: hasMoreElements() и nextElement().
  • В операциях CRUD он поддерживает только операцию ЧТЕНИЯ. Не поддерживает операции СОЗДАНИЯ, ОБНОВЛЕНИЯ и УДАЛЕНИЯ.
  • Он поддерживает только итерацию в прямом направлении. Вот почему он также известен как Однонаправленный курсор.
  • Не рекомендуется использовать его в новой базе кода или проектах.

ПРИМЕЧАНИЕ:- Что такое операции CRUD в API сбора данных?

  • СОЗДАТЬ: Добавление новых элементов в объект коллекции.
  • ПРОЧИТАЙТЕ: Извлечение элементов из объекта коллекции.
  • ОБНОВЛЕНИЕ: Обновление или настройка существующих элементов в объекте коллекции.
  • УДАЛИТЬ: Удаление элементов из объекта коллекции.

Чтобы преодолеть все эти проблемы, Java предлагает новые курсоры: Итератор и список в Java 1.2. Он представил новый тип курсора: Разделитель в Java 1.8.

Мы обсудим итератор с некоторыми подходящими примерами в этом посте.

Итератор Java

В Java итератор-это интерфейс, доступный в среде сбора данных в пакете java.util. Это курсор Java, используемый для перебора набора объектов.

  • Он используется для обхода элементов объекта коллекции один за другим.
  • Он доступен начиная с Java 1.2 Collection Framework.
  • Он применим для всех классов коллекций. Поэтому он также известен как Универсальный курсор Java.
  • Он поддерживает как операции ЧТЕНИЯ, так и операции УДАЛЕНИЯ.
  • По сравнению с интерфейсом перечисления, имена методов итератора просты и удобны в использовании.

Диаграмма классов итераторов Java

Как показано на диаграмме классов ниже, Итератор Java имеет четыре метода. Мы уже знакомы с первыми четырьмя методами. Корпорация Oracle добавила четвертый метод в этот интерфейс в выпуске Java SE 8.

Методы итератора Java

В этом разделе мы вкратце обсудим методы итератора Java. Мы подробно рассмотрим эти методы с некоторыми полезными примерами в следующем разделе.

  • логическое значение hasNext():Возвращает значение true, если в итерации больше элементов.
  • E next(): Возвращает следующий элемент в итерации.
  • по умолчанию void remove(): Удаляет из базовой коллекции последний элемент, возвращенный этим итератором.
  • по умолчанию недействительно forEachRemaining(действие потребителя): Выполняет данное действие для каждого оставшегося элемента до тех пор, пока все элементы не будут обработаны или действие не вызовет исключение.

Базовый пример итератора Java

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

Iterator iterator()

Он возвращает итератор по элементам, доступным в данном объекте коллекции.

Пример-1:-

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class ExternalIteratorDemo 
{
  public static void main(String[] args) 
  {
	List names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
	
	// Getting Iterator
	Iterator namesIterator = names.iterator();
		
	// Traversing elements
	while(namesIterator.hasNext()){
		System.out.println(namesIterator.next());			
	}	
	
  }
}

Пример-2:-

import java.util.LinkedList;
import java.util.List;

public class InternalIteratorDemo 
{
  public static void main(String[] args) 
  {
	List names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
		
	for(String name: names){
		System.out.println(name);			
	}	
	
  }
}

Если мы рассмотрим два приведенных выше примера, то оба примера делают одно и то же. В примере-1 мы создали объект итератора извне и извлекли элементы объекта списка один за другим. В примере-2 мы не создавали объект итератора извне. Мы используем расширенный цикл for для извлечения элементов объекта списка один за другим.

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

Выход:-

Rams
Posa
Chinni

Разработка Итератора Пользовательского Класса

В предыдущем разделе мы обсуждали, как API коллекции реализовал метод iterator() для итерации своих элементов с использованием или без использования расширенного цикла For.

В этом разделе мы обсудим, как предоставить аналогичные функциональные возможности для пользовательских или пользовательских классов. Мы должны следовать этим инструкциям, чтобы обеспечить эту функциональность:

  • Определите пользовательский класс.
  • Определите класс коллекции для этого пользовательского класса.
  • Этот класс коллекции должен реализовывать повторяющийся интерфейс с пользовательским классом в качестве параметра типа.
  • Этот класс коллекции должен обеспечивать реализацию метода итерационного интерфейса: iterator() .

Если мы реализуем эти инструкции в нашем пользовательском классе, то он готов использовать расширенный объект цикла или внешнего итератора для итерации своих элементов.

Давайте приведем простой пример, чтобы четко понять эти инструкции.

Пример:-

public class Employee {

  private int empid;
  private String ename;
  private String designation;
  private double salary;
	
  public Employee(int empid,String ename,String designation,double salary){
	this.empid = empid;
	this.ename = ename;
	this.designation = designation;
	this.salary = salary;
  }
	
  public int getEmpid() {
	return empid;
  }
	
  public String getEname() {
	return ename;
  }

  public String getDesignation() {
	return designation;
  }
	
  public double getSalary() {
	return salary;
  }	
	
  @Override
  public String toString(){
	return empid + "\t" + ename + "\t" + designation + "\t" + salary;	
  }
	
}
import java.util.*;

public class Employees implements Iterable{

	private List emps = null;
	
	public Employees(){
		emps = new ArrayList<&glt();
		emps.add(new Employee(1001,"Rams","Lead", 250000L));
		emps.add(new Employee(1002,"Posa","Dev", 150000L));
		emps.add(new Employee(1003,"Chinni","QA", 150000L));
	}
	
	@Override
	public Iterator iterator() {
		return emps.iterator();
	}

}
public class EmployeesTester {
	public static void main(String[] args) {
		Employees emps = new Employees();
		for(Employee emp : emps){
			System.out.println(emp);
		}
	}
}

Выход:-

1001	Rams	Lead	250000.0
1002	Posa	Dev	150000.0
1003	Chinni	QA	150000.0

Как Итератор Java Работает Внутренне?

В этом разделе мы попытаемся понять, как итератор Java и его методы работают внутри. Давайте рассмотрим следующий объект Связанного списка, чтобы понять эту функциональность.

List names = new LinkedList<>();
names.add("E-1");
names.add("E-2");
names.add("E-3");
.
.
.
names.add("E-n");

Теперь создайте объект итератора в объекте списка, как показано ниже:

Iterator namesIterator = names.iterator();

Предположим, что итератор “имена” выглядит следующим образом:

Здесь курсор итератора указывает на предыдущий первый элемент списка. Теперь мы запускаем следующий фрагмент кода.

  namesIterator.hasNext();
  namesIterator.next();

Когда мы запускаем приведенный выше фрагмент кода, курсор итератора указывает на первый элемент в списке, как показано на приведенной выше диаграмме. Затем запустите следующий фрагмент кода.

  namesIterator.hasNext();
  namesIterator.next();

Когда мы запускаем приведенный выше фрагмент кода, курсор итератора указывает на второй элемент в списке, как показано на приведенной выше диаграмме. Выполните этот процесс, чтобы переместить курсор итератора к конечному элементу списка.

После прочтения последнего элемента, если мы запустим приведенный ниже фрагмент кода, он вернет значение “false”.

  namesIterator.hasNext();

Когда курсор итератора указывает на после последнего элемента списка, метод hasNext() возвращает значение false.

После просмотра всех этих диаграмм мы можем сказать, что итератор Java поддерживает только итерацию в прямом направлении, как показано на приведенной ниже диаграмме. Таким образом, он также известен как Однонаправленный курсор.

Преимущества итератора Java

По сравнению с интерфейсом перечисления итератор Java обладает следующими преимуществами или преимуществами.

  • Мы можем использовать его для любого класса коллекции.
  • Он поддерживает как операции ЧТЕНИЯ, так и операции УДАЛЕНИЯ.
  • Это универсальный курсор для API сбора данных.
  • Имена методов просты и удобны в использовании.

Ограничения итератора Java

Однако итератор Java имеет следующие ограничения или недостатки.

  • В операциях CRUD он НЕ поддерживает операции СОЗДАНИЯ и ОБНОВЛЕНИЯ.
  • Он поддерживает только итерацию прямого направления, которая является однонаправленным итератором.
  • По сравнению с Spliterator, он НЕ поддерживает параллельное повторение элементов, что означает, что он поддерживает только последовательную итерацию.
  • По сравнению с Spliterator, он НЕ поддерживает лучшую производительность для итерации большого объема данных.

Чтобы преодолеть эти ограничения, Java представила еще два курсора: ListIterator и Spliterator. Мы обсудим эти два курсора в моих следующих постах.

Сходство между перечислением Java и итератором

В этом разделе мы обсудим сходство между двумя курсорами Java: перечислением Java и итератором

  • Оба являются курсорами Java.
  • Оба они используются для итерации элементов объекта коллекции один за другим.
  • Оба поддерживают операцию ЧТЕНИЯ или извлечения.
  • Оба являются однонаправленными курсорами Java, что означает, что поддерживает только итерацию в прямом направлении.

Различия между перечислением Java и итератором

В следующей таблице описаны различия между перечислением Java и итератором:

Введено в Java 1.2 Введено в Java 1.0
Не Унаследованный Интерфейс Устаревший интерфейс
Мы можем использовать его для любого класса коллекции. Он используется для итерации только устаревших классов коллекций.
Он поддерживает как операции ЧТЕНИЯ, так и УДАЛЕНИЯ. Он поддерживает только операцию ЧТЕНИЯ.
Это универсальный курсор. Это не Универсальный курсор.
Простые и удобные в использовании имена методов. Длинные имена методов.

Это все об итераторе в Java. Я надеюсь, что эти теории и примеры итераторов Java помогут вам начать работу с программированием итераторов.

Спасибо, что прочитали мои учебные пособия. Пожалуйста, напишите мне комментарий, если вам нравятся мои учебные пособия или у вас есть какие-либо вопросы или предложения или какие-либо ошибки типа.