Tofauti Kati ya Hesabu na Kinariri

Tofauti Kati ya Hesabu na Kinariri
Tofauti Kati ya Hesabu na Kinariri

Video: Tofauti Kati ya Hesabu na Kinariri

Video: Tofauti Kati ya Hesabu na Kinariri
Video: kufanana kwa fasihi simulizi na fasihi andishi | tofauti kati ya fasihi simulizi na fasihi andishi 2024, Julai
Anonim

Hesabu dhidi ya Iterator

Kuna miundo mingi ya data inayofanya kazi kama mikusanyo katika Java kama vile Vekta, majedwali ya Hash na madarasa ambayo hutekeleza Mfumo wa Mikusanyiko ya Java (yaani, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap na LinkedHashSet). Kuna njia nyingi za kurudia kupitia vipengele vya kibinafsi vya vitu kwenye Java. Java hutoa miingiliano miwili ili kurahisisha kazi hii. Hesabu na Iterator ni miingiliano miwili inayopatikana katika kifurushi cha java.util ambayo hutoa utendakazi wa kuhesabu kupitia mfuatano au vitu vilivyo na seti ya vipengee. Mhesabuji alianzishwa katika JDK 1.0 na Iterator ambayo ilianzishwa katika JDK 1.2 kwa hakika inarudia utendakazi wa Kihesabu (ndani ya Mfumo wa Mikusanyiko).

Hesabu ni nini?

Enumeration ni kiolesura cha umma katika Java, kilicholetwa katika JDK 1.0, ambacho hutoa uwezo wa kuhesabu kupitia mfuatano wa vipengele. Inapatikana chini ya kifurushi cha java.util. Wakati kiolesura cha Hesabu kinatekelezwa na kitu, kitu hicho kinaweza kutoa mlolongo wa vipengele. Kiolesura cha hesabu kina njia mbili. Mbinu hasMoreElements() itajaribu ikiwa hesabu hii ina vipengee zaidi na nextElement() inarudisha kipengee kifuatacho katika mlolongo (ikiwa kuna angalau moja zaidi ya kwenda). Kwa maneno mengine, kwa kupiga simu nextElement() mfululizo, programu inaweza kufikia vipengele vya mtu binafsi kwenye mfululizo. Kwa mfano, kuchapisha vipengele vyote katika Vekta v1 kwa kutumia Enumerator, kijisehemu cha msimbo kifuatacho kinaweza kutumika.

Hesabu e=v1.elements();

Wakati(e.hasMoreLements()){

System.out.println(e.nextElement());

}

Mhesabuji pia anaweza kutumiwa kufafanua mtiririko wa ingizo kwenye vipengee vya SequenceInputStream.

Iterator ni nini?

Iterator ni kiolesura cha umma katika kifurushi cha Java.util, ambacho huruhusu kurudia kupitia vipengele vya vitu vya mkusanyiko vinavyotekeleza mfumo wa Mikusanyiko (kama vile ArrayList, LinkedList, n.k.). Hii ilianzishwa katika JDK 1.2 na ikabadilisha Kihesabu ndani ya Mfumo wa Makusanyo ya Java. Iterator ina njia tatu. Mbinu hasNext() hujaribu ikiwa kuna vipengee vilivyosalia kwenye mkusanyiko na njia inayofuata() inarudisha kipengee kifuatacho kwenye safu. Njia ya remove() inaweza kutumika kuondoa kipengee cha sasa kutoka kwa mkusanyiko wa msingi. Kwa mfano, kuchapisha vipengele vyote katika Vekta v1 kwa kutumia Iterator, kijisehemu cha msimbo kifuatacho kinaweza kutumika.

Iterator i=v1.elements();

Wakati(I.hasNext()){

System.out.println(e.next());

}

Kuna tofauti gani kati ya Hesabu na Kihesabu?

Ingawa, Hesabu na Iterator ni violesura viwili vinavyopatikana katika kifurushi cha java.util, ambavyo huruhusu kurudia/kuhesabu kupitia vipengele vya mfululizo, vina tofauti zake. Kwa kweli, Iterator, ambayo ilianzishwa baada ya Kuhesabu, inachukua nafasi ya Hesabu ndani ya mfumo wa Makusanyo ya Java. Tofauti na Hesabu, Iterator ni salama-salama. Hii ina maana kwamba marekebisho ya wakati mmoja (kwa mkusanyiko wa msingi) hayaruhusiwi wakati Kiigizo kinatumika. Hii ni muhimu sana katika mazingira yenye nyuzi nyingi ambapo daima kuna hatari ya marekebisho ya wakati mmoja. Katika tukio la urekebishaji kwa wakati mmoja, kitu cha Iterator kitatupa ConcurrentModificationException. Iterator ina majina mafupi ya mbinu ikilinganishwa na Enumerator. Zaidi ya hayo, kirudio kina utendaji wa ziada wa kufuta vipengele wakati wa kurudia (jambo ambalo haliwezekani kwa kutumia Enumerator). Kwa hivyo, ikiwa kuna haja ya kuondoa vipengee kwenye mkusanyiko, Iterator ndilo chaguo pekee linaloweza kuzingatiwa.

Ilipendekeza: