Տարբերությունը թվարկման և կրկնվողի միջև

Տարբերությունը թվարկման և կրկնվողի միջև
Տարբերությունը թվարկման և կրկնվողի միջև

Video: Տարբերությունը թվարկման և կրկնվողի միջև

Video: Տարբերությունը թվարկման և կրկնվողի միջև
Video: Մոսկվայի և Կարսի պայմանագրեր. ինչպես գծվեց հայ-թուրքական ներկայիս սահմանը | Բացատրում է Լազարյանը 2024, Նոյեմբեր
Anonim

Թվարկում ընդդեմ Իտերատոր

Կան բազմաթիվ տվյալների կառուցվածքներ, որոնք գործում են որպես Java-ի հավաքածուներ, ինչպիսիք են վեկտորները, Hash աղյուսակները և դասերը, որոնք իրականացնում են Java Collections Framework-ը (այսինքն՝ HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap և LinkedHashSet): Java-ում օբյեկտների առանձին տարրերի միջոցով կրկնելու բազմաթիվ եղանակներ կան: Java-ն ապահովում է երկու ինտերֆեյս՝ այս առաջադրանքը հեշտացնելու համար: Enumeration-ը և Iterator-ը java.util փաթեթում հայտնաբերված ինտերֆեյսներից երկուսն են, որոնք ապահովում են մի շարք տարրերով հաջորդականությունների կամ առարկաների միջոցով թվարկելու գործառույթ: Համարիչը ներդրվել է JDK 1-ում:0-ը և Iterator-ը, որը ներկայացվել է JDK 1.2-ում, գործնականում կրկնօրինակում է Enumerator-ի ֆունկցիոնալությունը (Collections Framework-ի շրջանակներում):

Ի՞նչ է թվարկումը:

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 փաթեթի հանրային ինտերֆեյս է, որը թույլ է տալիս կրկնել հավաքածուների օբյեկտների տարրերի միջոցով, որոնք իրականացնում են Collections շրջանակը (օրինակ՝ 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-ի հետ: Ավելին, iterator-ն ունի կրկնման ընթացքում տարրերը ջնջելու լրացուցիչ գործառույթ (ինչը հնարավոր չէ Enumerator-ի միջոցով):Այսպիսով, եթե անհրաժեշտություն կա տարրերը հեռացնել հավաքածուից, Iterator-ը միակ տարբերակն է, որը կարելի է դիտարկել:

Խորհուրդ ենք տալիս: