Изброяване срещу Iterator
Има много структури от данни, които действат като колекции в Java като Vectors, Hash таблици и класове, която реализира Java Collections Framework (т.е. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap и LinkedHashSet). Има много начини за итерация чрез отделните елементи на обектите в Java. Java предоставя два интерфейса, за да улесни тази задача. Изброяване и Iterator са два от интерфейсите, открити в пакета 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 е публичен интерфейс в пакета Java.util, който позволява повторение чрез елементи от колекционните обекти, които реализират рамката на Collections (като ArrayList, LinkedList и т.н.). Това беше въведено в JDK 1.2 и замести изброителя в рамките на Java Collections Framework. Итераторът има три метода. Методът hasNext () тества дали има останали елементи в колекцията и методът next () връща следващия елемент от поредицата. Методът Remove () може да се използва за премахване на текущия елемент от основната колекция. Например, за да отпечатате всички елементи във Vector v1 с помощта на Iterator, може да се използва следният фрагмент на код.
Iterator i = v1.elements ();
Докато (i.hasNext ())
System.out.println (e.next ());
Каква е разликата между изброяване и итератор?
Въпреки че Enumeration и Iterator са два от интерфейсите, открити в пакета java.util, които позволяват повторение / изброяване чрез елементи от серия, те имат своите различия. Всъщност Iterator, който беше въведен след изброяване, замества изброяването в рамките на Java Collection Collection. За разлика от изброяването, Iterator не е безопасен. Това означава, че не се допускат едновременни модификации (на основната колекция), когато се използва Iterator. Това е много полезно в многонишкова среда, където винаги съществува риск от едновременни модификации. В случай на едновременна модификация обектът Iterator ще хвърли ConcurrentModificationException. Iterator има по-къси имена на методи в сравнение с Enumerator. Освен това, итераторът има допълнителната функционалност за изтриване на елементи по време на итерацията (което не е възможно с помощта на Enumerator). Така че, ако има нужда от премахване на елементи от колекцията, Iterator е единствената възможност, която може да бъде разгледана.