Išnagrinėkite kai kuriuos kitus skirtumus, pateikiamus žemiau pateiktoje palyginimo diagramoje.
Palyginimo diagrama
Palyginimo pagrindas | „ArrayList“ | Vektorius |
---|---|---|
Pagrindinis | „ArrayList“ klasė nėra sinchronizuota. | Sinchronizuojama vektoriaus klasė. |
Legacy klasė | „ArrayList“ yra standartinė kolekcijos klasė. | „Vector“ yra palikta klasė, sukonstruota taip, kad palaikytų rinkimo klasę. |
Klasės deklaracija | klasės ArrayList | klasės vektorius |
Perskirstymas | Kai nenurodyta, „ArrayList“ padidinamas per pusę jo dydžio. | Jei nenurodyta, vektorius padidinamas iki dvigubo dydžio. |
Spektaklis | Kadangi „ArrayList“ yra sinchronizuotas, jis veikia greičiau nei „Vector“. | Sinchronizavus „Vector“, jis veikia lėčiau nei „ArrayList“. |
Surašymas / Iteratorius | „ArrayList“ naudoja „Iterator“ sąsają „ArrayList“ saugomų objektų judėjimui. | Vektoriuje naudojami vektoriai naudojamų objektų judėjimui naudoja Enumeration ir Iterator sąsajas. |
„ArrayList“ apibrėžimas
„ArrayList“ priklauso standartinių rinkinių klasių sąrašui. Klasė „ArrayList“ yra apibrėžta „ java.util“ pakete, ji praplečia „ AbstractList“ klasę, kuri taip pat yra standartinė kolekcijos klasė, ir taip pat įgyvendina „ List“, sąsają, nustatytą „Collection Interfaces“. „Java“ standartinė matrica visada yra fiksuoto ilgio. Tai reiškia, kad kažkada sukurta; ji nėra dinamiškai auganti arba susitraukianti. Taigi, turėtumėte iš anksto žinoti apie naudojamo masyvo ilgį. Tačiau kartais gali atsitikti, kad reikalingas ilgis atskleidžiamas vykdymo metu, kad susidorotų su tokia situacija java pristatė „ArrayList“.
ArrayList yra klasė, naudojama dinaminiam masyvo kūrimui, kuriame yra nuorodos į objektus. Ši masyvas gali augti, kai ir kada reikia. Klasės deklaracija yra tokia:
klasės ArrayList
Čia E nurodo masyvo objektų tipą. Sukurtas masyvas yra kintamo ilgio, jis padidėja ir mažėja, kai objektai pridedami arba pašalinami iš sąrašo.
„ArrayList“ nėra sinchronizuojamas, tai reiškia, kad tuo pačiu metu masyvui gali veikti daugiau nei viena gija. Pavyzdžiui, jei vienas sriegis prideda objekto nuorodą į masyvą, o kitas sriegis tuo pačiu metu pašalina objekto nuorodą iš tos pačios masyvo. Dinamiško masyvo sukūrimas naudojant „ArrayList“ klasę:
ArrayList S1 = naujas ArrayList (); System.out.println („Pradinis S1 dydis:“ + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.println ("Po pridėjimo S1 yra:" + S1); System.out.println ("S1 dydis po pridėjimo:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Po ištrynimo S1 yra:" + S1); System.out.println ("S1 dydis po ištrynimo:" + S1.size ()); // S1 išvesties pradinis dydis: Po pridėjimo S1 yra: [T, E, C, H]; S1 dydis po pridėjimo: 4 Po ištrynimo S1 yra: [E, H] S1 dydis po ištrynimo: 2
Minėtame kode galite matyti; Aš sukūriau eilutės tipo styginių. Aš pridėjau kai kuriuos objektus į masyvą S1, naudodami pridėjimo () metodą, o vėliau ištrinti kai kuriuos objektus, naudodami šalinimo () metodą. Galite pastebėti, jei nenurodote pradinio masyvo dydžio, kurio ilgis bus „0“. Kaip matote, masyvas auga ir mažėja, kai pridedate ir ištrinate elementus.
Vektoriaus apibrėžimas
„Vector“ yra palikta klasė, kuri yra pertvarkyta, kad būtų palaikoma kolekcijų klasės hierarchijos rinkinių klasė. Vektorių klasė taip pat apibrėžta java.util pakete, išplėsta „ AbstractList“ klasės ir įgyvendinama sąrašo sąsaja. „Vector“ klasė yra paskelbta taip:
klasės vektorius
Čia E apibrėžia objekto tipą, kuris bus saugomas masyve. Masyvas, sukurtas naudojant „Vector“ klasę, yra įvairaus ilgio. Jei padidinimas nenurodytas, jis padidėja dvigubai. Suprasime masyvo kūrimą naudojant „Vector“.
Vektorius V = naujas Vektorius (1, 1); V.addElement („Tech“); V.addElement („Skirtumai“); System.out.println ("Talpa po 2 papildymo:" + V. talpa ()); V.addElement („Tarp“); V.addElement ("vektoriai"); System.out.println ("Dabartinė talpa:" + V. talpa () "; // Išėjimo talpa po 2 papildymo: 2 Srovės talpa: 4
Anksčiau pateiktame kode galite pamatyti, kad aš ypač paminėjau vektoriaus konstruktoriaus dydį ir prieaugio vertę, tuo pačiu skelbdama eilutės objektų masyvą. Vadinasi, galite pastebėti, kad masyvo ribos ribose jis didėja pagal vertę, pateiktą konstruktoriui deklaracijos metu.
Pagrindiniai ArrayList ir vektorių skirtumai
- Tuo pačiu metu „ArrayList“ gali veikti keli siūlai, todėl jis laikomas nesinchronizuotu . Skirtingai nuo „ArrayList“, vienu metu vektoriuje gali veikti tik viena gija; todėl jis vadinamas sinchronizuotu .
- Ankstyvoje „Java“ versijoje kai kurios klasės ir sąsajos suteiktų metodus, kaip saugoti daiktus, kurie buvo vadinami palikimo klasėmis. Vektorius yra vienas iš „Legacy“ klasės „Java“. Vėliau šios palikimo klasės buvo pertvarkytos, kad palaikytų kolekcijos klasę, o „ArrayList“ klasė yra standartinė kolekcijų klasė.
- Kai masyvo riba yra visiškai panaudota, o šalia išeikvotos masyvo pridedamas naujas objektas, jo dydis auga abiem atvejais, pvz., „ArrayList“ ir „Vector“, bet skirtumas yra tas, kad „ArrayList“, jei nenurodytas dydis, yra padidinama 50% dabartinės masyvo, o „Vektorių masyvo“ dydis padvigubinamas, jei nenurodyta prieaugio vertė.
- Vektorius naudoja skaičiavimą, taip pat Iterator, kad būtų galima pereiti masyvą, tuo tarpu ArrayList naudoja tik iteratorių masyvui judėti.
- Kadangi „ArrayList“ yra „Unsynchronized“ ir daugelis temų gali veikti tuo pačiu metu, jo našumas yra geresnis nei „Vector“, kuriame vienu metu gali veikti tik viena gija.
Panašumai:
- „ArrayList“ ir „Vector“ abu yra apibrėžti „java.util“ pakete.
- ArrayList ir Vector abu pratęsia AbsractList klasę.
- „ArrayList“ ir „Vector“ abu įgyvendina „List“ sąsają.
- „ArrayList“ ir „vektoriai“ naudojami sukurti dinaminę masyvą, kuris auga pagal poreikį.
- ArrayList ir Vector abu turi objektų nuorodas.
Išvada:
Baigdamas sakau, kad „ArrayList“ naudojimas yra geresnis nei naudojant „Vector“, nes jis veikia greičiau ir geriau.