Разлика между изброяване и итератор

Разлика между изброяване и итератор
Разлика между изброяване и итератор

Видео: Разлика между изброяване и итератор

Видео: Разлика между изброяване и итератор
Видео: Чем Генераторы отличаются от Итераторов в Python? 2024, Декември
Anonim

Изброяване срещу Iterator

Има много структури от данни, които действат като колекции в Java, като вектори, таблици на хеш и класове, които прилагат Java Collections Framework (т.е. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap и LinkedHashSet). Има многобройни начини за итерация през отделните елементи на обектите в Java. Java предоставя два интерфейса, за да улесни тази задача. Изброяването и Итераторът са два от интерфейсите, намерени в пакета java.util, които осигуряват функционалност за изброяване чрез последователности или обекти с набор от елементи. Enumerator е въведен в JDK 1.0, а Iterator, който е въведен в JDK 1.2, практически дублира функционалността на Enumerator (в рамките на Collections Framework).

Какво е изброяване?

Изброяването е публичен интерфейс в Java, въведен в JDK 1.0, който предоставя възможност за изброяване чрез последователности от елементи. Той се намира под пакета java.util. Когато интерфейсът за изброяване е реализиран от обект, този обект може да генерира последователност от елементи. Интерфейсът за изброяване има два метода. Методът hasMoreElements () ще провери дали това изброяване съдържа повече елементи и nextElement () връща следващия елемент в последователността (ако има поне още един). С други думи, чрез последователно извикване на nextElement () програмистът може да осъществи достъп до отделните елементи в поредицата. Например, за да отпечатате всички елементи във Vector v1 с помощта на Enumerator, може да се използва следният кодов фрагмент.

Изброяване e = v1.elements ();

Докато (e.hasMoreLements ()) {

System.out.println (e.nextElement ());

}

Преброителят може също да се използва за дефиниране на потока от входни данни към SequenceInputStream обекти.

Какво е Iterator?

Iterator е публичен интерфейс в пакета Java.util, който позволява итерация през елементи на обектите на колекции, които реализират рамката на колекциите (като ArrayList, LinkedList и др.). Това беше въведено в JDK 1.2 и замени Enumerator в рамките на Java Collections Framework. Iterator има три метода. Методът hasNext () проверява дали има останали елементи в колекцията и методът next () връща следващия елемент от поредицата. Методът remove () може да се използва за премахване на текущия елемент от основната колекция. Например, за да отпечатате всички елементи във Vector v1 с помощта на Iterator, може да се използва следният кодов фрагмент.

Итератор i = v1.elements ();

Докато (i.hasNext ()) {

System.out.println (e.next ());

}

Каква е разликата между изброяване и итератор?

Въпреки че Enumeration и Iterator са два от интерфейсите, намерени в пакета java.util, които позволяват итерация / изброяване през елементи от поредица, те имат своите разлики. Всъщност Iterator, който беше въведен след Enumeration, замества Enumeration в рамките на Java Collections. За разлика от Enumeration, Iterator е безопасен за работа. Това означава, че едновременните модификации (на основната колекция) не са разрешени, когато се използва Iterator. Това е много полезно в многонишкови среди, където винаги съществува риск от едновременни модификации. В случай на едновременна модификация, обектът Iterator ще хвърли ConcurrentModificationException. Iterator има по-кратки имена на методи в сравнение с Enumerator. Освен това,iterator има допълнителната функционалност за изтриване на елементи по време на итерацията (което не е възможно с Enumerator). Така че, ако има нужда от премахване на елементи от колекцията, Iterator е единствената опция, която може да се има предвид.

Препоръчано: