Перерахування проти Ітератора
Є багато структур даних, які діють як колекції в Java, такі як Vectors, Hash таблиці та класи, які реалізують Java Collections Framework (тобто HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap та LinkedHashSet). Існує численні способи ітерації через окремі елементи об’єктів на Яві. Java забезпечує два інтерфейси для полегшення цього завдання. Перерахування та ітератор - це два інтерфейси, знайдені в пакеті java.util, які забезпечують функціональність для перерахування через послідовності або об'єкти з набором елементів. Enumerator був представлений в JDK 1.0, а Iterator, який був введений в JDK 1.2, практично дублює функціональність Enumerator (в рамках колекцій).
Що таке перерахування?
Перерахування - це публічний інтерфейс на Java, введений в JDK 1.0, який забезпечує можливість перерахування через послідовності елементів. Він знаходиться під пакетом java.util. Коли інтерфейс перерахування реалізований об'єктом, цей об'єкт може генерувати послідовність елементів. Інтерфейс перерахування має два способи. Метод hasMoreElements () перевірить, чи містить це перерахунок більше елементів, і nextElement () повертає наступний елемент у послідовності (якщо є хоча б ще один). Іншими словами, викликаючи nextElement () послідовно, програміст може отримати доступ до окремих елементів серії. Наприклад, для друку всіх елементів у Vector v1 за допомогою Enumerator можна використовувати наступний фрагмент коду.
Перерахування e = v1.elements ();
Хоча (e.hasMoreLements ())
System.out.println (e.nextElement ());
Керівник також може бути використаний для визначення потоку введення до об'єктів SequenceInputStream.
Що таке Ітератор?
Iterator - це публічний інтерфейс у пакеті Java.util, який дозволяє повторювати елементи елементів колекцій, що реалізують рамки Collections (наприклад, ArrayList, LinkedList тощо). Це було введено в JDK 1.2 і замінило Перелік в рамках Java Collections Framework. Ітератор має три методи. Метод hasNext () перевіряє, чи є в колекції залишилися елементи, а метод next () повертає наступний елемент у серії. Метод delete () може бути використаний для видалення поточного елемента з базової колекції. Наприклад, для друку всіх елементів у Vector v1 за допомогою Iterator можна використовувати наступний фрагмент коду.
Ітератор i = v1.elements ();
Хоча (i.hasNext ())
System.out.println (e.next ());
Яка різниця між Перерахуванням та Ітератором?
Хоча Enumeration та Iterator - це два інтерфейси, знайдені в пакеті java.util, які дозволяють ітерацію / перерахування через елементи серії, вони мають свої відмінності. Власне, Iterator, який був представлений після перерахування, замінює перерахування в рамках колекцій Java Collections. На відміну від «Перерахування», Ітератор не працює в безпеці. Це означає, що одночасні модифікації (для базової колекції) не використовуються при використанні Iterator. Це дуже корисно в багатопотокових середовищах, де завжди існує ризик одночасних модифікацій. У разі одночасної модифікації об'єкт Iterator передасть ConcurrentModificationException. Ітератор має більш короткі назви методів порівняно з Enumerator. Крім того, ітератор має додаткову функціональність для видалення елементів під час ітерації (що неможливо за допомогою Enumerator). Отже, якщо є необхідність видалити елементи з колекції, Iterator - це єдиний варіант, який можна розглянути.