აღრიცხვა იტერატორის წინააღმდეგ
არის მრავალი მონაცემთა სტრუქტურა, რომელიც მოქმედებს ჯავის კოლექციებად, როგორიცაა ვექტორები, ჰეშის ცხრილები და კლასები, რომლებიც ახორციელებენ Java კოლექციების ჩარჩოს (მაგ. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap და LinkedHashSet). Java-ში ობიექტების ცალკეული ელემენტების მეშვეობით განმეორების მრავალი გზა არსებობს. ჯავა უზრუნველყოფს ორ ინტერფეისს ამ ამოცანის გასაადვილებლად. Enumeration და Iterator არის ორი ინტერფეისი, რომელიც ნაპოვნია java.util პაკეტში, რომლებიც უზრუნველყოფენ ფუნქციონირებას მიმდევრობების ან ობიექტების მეშვეობით ერთეულების კომპლექტით. Enumerator დაინერგა JDK 1-ში.0 და Iterator, რომელიც დაინერგა JDK 1.2-ში, პრაქტიკულად აორმაგებს Enumerator-ის ფუნქციონირებას (კოლექციების ჩარჩოში).
რა არის აღრიცხვა?
Enumeration არის საჯარო ინტერფეისი Java-ში, დანერგილი JDK 1.0-ში, რომელიც უზრუნველყოფს ელემენტების თანმიმდევრობით ჩამოთვლას. ის გვხვდება java.util პაკეტის ქვეშ. როდესაც Enumeration ინტერფეისი ხორციელდება ობიექტის მიერ, ამ ობიექტს შეუძლია შექმნას ელემენტების თანმიმდევრობა. აღრიცხვის ინტერფეისს აქვს ორი მეთოდი. მეთოდი hasMoreElements() შეამოწმებს, შეიცავს თუ არა ეს რიცხვი მეტ ელემენტს და nextElement() აბრუნებს შემდეგ ელემენტს მიმდევრობაში (თუ კიდევ ერთი მაინც არის გასავლელი). სხვა სიტყვებით რომ ვთქვათ, nextElement() თანმიმდევრულად გამოძახებით, პროგრამისტს შეუძლია წვდომა სერიის ცალკეულ ელემენტებზე. მაგალითად, ვექტორ v1-ში ყველა ელემენტის დასაბეჭდად Enumerator-ის გამოყენებით, შეიძლება გამოყენებულ იქნას კოდის შემდეგი ნაწყვეტი.
აღრიცხვა e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Enumerator ასევე შეიძლება გამოყენებულ იქნას SequenceInputStream ობიექტების შეყვანის ნაკადის დასადგენად.
რა არის Iterator?
Iterator არის საჯარო ინტერფეისი Java.util პაკეტში, რომელიც საშუალებას იძლევა გამეორება კოლექციების ობიექტების ელემენტებით, რომლებიც ახორციელებენ კოლექციების ჩარჩოს (როგორიცაა ArrayList, LinkedList და ა.შ.). ეს დაინერგა JDK 1.2-ში და ჩაანაცვლა Enumerator Java Collections Framework-ში. Iterator-ს სამი მეთოდი აქვს. მეთოდი hasNext() ამოწმებს არის თუ არა დარჩენილი ელემენტები კოლექციაში და next() მეთოდი აბრუნებს სერიის შემდეგ ელემენტს. remove() მეთოდი შეიძლება გამოყენებულ იქნას მიმდინარე ელემენტის ამოსაღებად ძირითადი კოლექციიდან. მაგალითად, ვექტორ v1-ში ყველა ელემენტის დასაბეჭდად Iterator-ის გამოყენებით, შეიძლება გამოყენებულ იქნას შემდეგი კოდის ნაწყვეტი.
Iterator i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
რა განსხვავებაა Enumeration-სა და Iterator-ს შორის?
მიუხედავად იმისა, რომ Enumeration და Iterator არის ორი ინტერფეისი, რომელიც ნაპოვნია java.util პაკეტში, რომლებიც საშუალებას იძლევა გამეორება/აღრიცხვა სერიის ელემენტების მეშვეობით, მათ აქვთ განსხვავებები. ფაქტობრივად, Iterator, რომელიც დაინერგა Enumeration-ის შემდეგ, ცვლის Enumeration-ს Java Collections ფარგლებში. Enumeration-ისგან განსხვავებით, Iterator უსაფრთხოა წარუმატებლობისგან. ეს ნიშნავს, რომ ერთდროული ცვლილებები (ძირითადი კოლექცია) დაუშვებელია Iterator-ის გამოყენებისას. ეს ძალიან სასარგებლოა მრავალძაფის გარემოში, სადაც ყოველთვის არის თანმხლები ცვლილებების რისკი. ერთდროული მოდიფიკაციის შემთხვევაში, Iterator ობიექტი ჩააგდებს ConcurrentModificationException-ს. Iterator-ს აქვს მეთოდის უფრო მოკლე სახელები Enumerator-თან შედარებით. გარდა ამისა, იტერატორს აქვს ელემენტების წაშლის დამატებითი ფუნქცია გამეორების დროს (რაც შეუძლებელია Enumerator-ის გამოყენებით).ასე რომ, თუ საჭიროა ელემენტების ამოღება კოლექციიდან, Iterator არის ერთადერთი ვარიანტი, რომელიც შეიძლება განიხილებოდეს.