Тізім және Итератор
Java тілінде коллекциялар ретінде әрекет ететін көптеген деректер құрылымдары бар, мысалы, Java Collections Framework (яғни, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap және LinkedHashSet) іске асыратын Векторлар, Хэш кестелері және сыныптар. Java тіліндегі нысандардың жеке элементтерін қайталаудың көптеген жолдары бар. Java бұл тапсырманы жеңілдету үшін екі интерфейсті ұсынады. Санақ және Итератор - java.util бумасында табылған екі интерфейс, олар элементтер жиыны бар тізбектер немесе нысандар арқылы санау мүмкіндігін береді. Санақшы JDK 1-де енгізілді.0 және JDK 1.2 нұсқасына енгізілген Итератор Санақ құралының функционалдығын іс жүзінде қайталайды (Жинақтар шеңбері ішінде).
Тізім дегеніміз не?
Тізім JDK 1.0 жүйесінде енгізілген Java тіліндегі жалпыға ортақ интерфейс, ол элементтер тізбегі арқылы санау мүмкіндігін береді. Ол java.util бумасы астында орналасқан. Санақ интерфейсі нысан арқылы жүзеге асырылған кезде, бұл нысан элементтер тізбегін жасай алады. Санақ интерфейсінің екі әдісі бар. hasMoreElements() әдісі бұл тізімде көбірек элементтер бар-жоғын тексереді және nextElement() реттіліктегі келесі элементті қайтарады (егер кемінде тағы біреуі бар болса). Басқаша айтқанда, nextElement() функциясын ретімен шақыру арқылы бағдарламашы сериядағы жеке элементтерге қол жеткізе алады. Мысалы, Enumerator көмегімен Vector v1 ішіндегі барлық элементтерді басып шығару үшін келесі код үзіндісін пайдалануға болады.
Тізім e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Санаушыны SequenceInputStream нысандарына енгізу ағынын анықтау үшін де пайдалануға болады.
Итератор дегеніміз не?
Итератор – Java.util бумасындағы жалпыға ортақ интерфейс, ол Коллекциялар шеңберін жүзеге асыратын коллекциялар нысандарының элементтері арқылы итерациялауға мүмкіндік береді (мысалы, ArrayList, LinkedList, т.б.). Бұл JDK 1.2 нұсқасына енгізілді және Java Collections Framework шеңберіндегі санағышты ауыстырды. Итератордың үш әдісі бар. hasNext() әдісі жинақта қалған элементтердің бар-жоғын тексереді және next() әдісі сериядағы келесі элементті қайтарады. Remove() әдісі ағымдағы элементті негізгі жинақтан жою үшін пайдаланылуы мүмкін. Мысалы, Итераторды пайдаланып Vector v1 ішіндегі барлық элементтерді басып шығару үшін келесі код үзіндісін пайдалануға болады.
Итератор i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
Тізім мен Итератордың айырмашылығы неде?
Тізімдеу және Итератор java.util бумасында табылған, серияның элементтері арқылы итерациялауға/санақтауға мүмкіндік беретін екі интерфейс болса да, олардың айырмашылықтары бар. Шындығында, Тізімдеуден кейін енгізілген Итератор Java Collections шеңберіндегі тізімді ауыстырады. Санаудан айырмашылығы, Итератор қатеге қарсы. Бұл Итератор пайдаланылған кезде бір мезгілде өзгертулерге (негізгі жинаққа) рұқсат етілмейтінін білдіреді. Бұл әрқашан бір мезгілде өзгертулер қаупі бар көп ағынды орталарда өте пайдалы. Бір мезгілде өзгерту болған жағдайда, Итератор нысаны ConcurrentModificationException шығарады. Итераторда Enumerator-пен салыстырғанда қысқа әдіс атаулары бар. Сонымен қатар, итераторда итерация кезінде элементтерді жоюдың қосымша мүмкіндігі бар (бұл Enumerator көмегімен мүмкін емес). Сонымен, коллекциядан элементтерді жою қажет болса, Итератор қарастырылуы мүмкін жалғыз опция болып табылады.