ኢንሜሽን vs ኢተርተር
በጃቫ ውስጥ እንደ ቬክተሮች፣ ሃሽ ሰንጠረዦች እና የJava Collections Frameworkን (ማለትም HashMap፣ HashSet፣ ArrayList፣ TreeSet፣ TreeMap፣ LinkedList፣ LinkedHashMap እና LinkedHashSet)ን የሚተገብሩ ብዙ የመረጃ አወቃቀሮች አሉ። በጃቫ ውስጥ በተናጥል የነገሮችን አካላት ለመድገም ብዙ መንገዶች አሉ። ይህን ተግባር ቀላል ለማድረግ ጃቫ ሁለት በይነገጾች ያቀርባል. ኢነሜሬሽን እና ኢተርሬተር በጃቫ.util ጥቅል ውስጥ ከሚገኙት በይነገጾች ሁለቱ በቅደም ተከተል ወይም በንጥሎች ስብስብ ለመቁጠር ተግባርን የሚሰጡ ናቸው። ቆጣሪው በJDK 1 ውስጥ ቀርቧል።0 እና ኢቴሬተር በJDK 1.2 የተዋወቀው የኢንሜሬተሩን ተግባር (በስብስብ ማዕቀፍ ውስጥ) ማለት ይቻላል ይባዛል።
ኢንሜሬሽን ምንድን ነው?
ኢንዩሜሬሽን በJDK 1.0 የተዋወቀው በጃቫ ውስጥ ያለ ይፋዊ በይነገጽ ነው፣ይህም በንጥረ ነገሮች ቅደም ተከተል የመቁጠር ችሎታን ይሰጣል። በ java.util ጥቅል ስር ይገኛል። የኢንሜሬሽን በይነገጽ በአንድ ነገር ሲተገበር ያ ነገር ተከታታይ ንጥረ ነገሮችን ማመንጨት ይችላል። የኢንሜሽን በይነገጽ ሁለት ዘዴዎች አሉት. ዘዴውMoreElements() ይህ ቆጠራ ብዙ አካላትን ከያዘ እና ቀጣዩ ክፍል() በቅደም ተከተል የሚቀጥለውን አካል ከመለሰ (ቢያንስ አንድ ተጨማሪ ካለ) ይሞከራል። በሌላ አነጋገር ለቀጣይElement() በተከታታይ በመደወል ፕሮግራመር በተከታታዩ ውስጥ ያሉትን ነጠላ ንጥረ ነገሮች ማግኘት ይችላል። ለምሳሌ፣ ሁሉንም ኤለመንቶች በቬክተር v1 ውስጥ ኢንዩሜሬተርን ተጠቅመው ለማተም የሚከተለውን ኮድ ቅንጭብ መጠቀም ይቻላል።
መቁጠር e=v1.elements();
እያለ(e.hasMoreLements()){
System.out.println(e.nextElement());
}
ኢንዩመሬተር እንዲሁ ወደ SequenceInputStream ዕቃዎች የሚያስገባውን ዥረት ለመወሰን ጥቅም ላይ ሊውል ይችላል።
ኢተርተር ምንድን ነው?
ኢተርሬተር በJava.util ጥቅል ውስጥ ያለ ይፋዊ በይነገጽ ነው፣ይህም በክምችት አካላት ውስጥ የክምችት ማዕቀፉን በሚተገብሩ ነገሮች (እንደ ArrayList፣ LinkedList፣ ወዘተ) መደጋገም ያስችላል። ይህ በJDK 1.2 አስተዋወቀ እና ኢንሜሬተርን በJava Collections Framework ውስጥ ተክቷል። ኢተርተር ሶስት ዘዴዎች አሉት። ዘዴው ቀጣይ() በክምችቱ ውስጥ የተቀሩት ንጥረ ነገሮች መኖራቸውን ይፈትሻል እና ቀጣዩ() ዘዴ ቀጣዩን ተከታታዮችን ይመልሳል። የማስወገድ () ዘዴ የአሁኑን ንጥረ ነገር ከስር ስብስብ ለማስወገድ ሊያገለግል ይችላል። ለምሳሌ፣ ሁሉንም ኤለመንቶችን በቬክተር v1 ላይ ለማተም ኢተሬተርን በመጠቀም የሚከተለውን ኮድ ቅንጭብ መጠቀም ይቻላል።
Iterator i=v1.elements();
እያለ(i.hasNext()){
System.out.println(ቀጣይ())፤
}
በኢንሜሬሽን እና ኢቴሬተር መካከል ያለው ልዩነት ምንድን ነው?
ቢሆንም፣ ኢነመሬሽን እና ኢቴሬተር በጃቫ.util ጥቅል ውስጥ ከሚገኙት በይነገጽ ሁለቱ ሲሆኑ፣ በተከታታይ ክፍሎች መደጋገም/መቁጠርን የሚፈቅዱ ግን ልዩነታቸው አላቸው። በእውነቱ፣ ከኢንሜሬሽን በኋላ የተዋወቀው ኢቴሬተር፣ በጃቫ ስብስቦች ማዕቀፍ ውስጥ ኢንሜሬሽን ይተካል። ከኢንሜሬሽን በተለየ፣ ኢቴሬተር አልተሳካም-አስተማማኝ ነው። ይህ ማለት ኢቴሬተር ጥቅም ላይ በሚውልበት ጊዜ በአንድ ጊዜ ማሻሻያ (ከሥሩ ስብስብ ጋር) አይፈቀድም። ይህ ሁል ጊዜ በአንድ ጊዜ የመቀየር አደጋ በሚኖርበት ባለብዙ-ክር አካባቢዎች ውስጥ በጣም ጠቃሚ ነው። በአንድ ጊዜ ማሻሻያ በሚደረግበት ጊዜ የኢቴሬተር ነገር ConcurrentModificationException ይጥላል። ኢቴሬተር ከኢንሜሬተር ጋር ሲወዳደር አጠር ያሉ የስልት ስሞች አሉት። በተጨማሪም ኢቴሬተር በድግግሞሹ ወቅት ኤለመንቶችን የመሰረዝ ተጨማሪ ተግባር አለው (ኢንሜሬተርን መጠቀም አይቻልም)።ስለዚህ፣ ከስብስቡ ውስጥ ክፍሎችን ማስወገድ አስፈላጊ ከሆነ፣ ሊታሰብበት የሚችለው ብቸኛው አማራጭ ኢተርተር ነው።