Skirtumas tarp ArrayList ir Vektorius Java

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 1 Gegužė 2024
Anonim
14.4 Vector vs ArrayList in Java
Video.: 14.4 Vector vs ArrayList in Java

Turinys


„ArrayList“ ir „Vector“ yra klasės pagal kolekcijų sąrangos hierarchiją. „ArrayList“ ir „Vector“ yra naudojami kuriant dinamišką objektų masyvą, kuriame masyvo dydis gali išaugti prireikus. Yra du pagrindiniai skirtumai, išskiriantys „ArrayList“ ir „Vector“: „Vektorius“ priklauso „Legacy“ klasėms, kurios vėliau buvo perprojektuotos palaikyti kolekcijos klases, o „ArrayList“ yra standartinė kolekcijos klasė. Kitas svarbus skirtumas yra tas, kad, kita vertus, „ArrayList“ nėra sinchronizuotas; Vektorius sinchronizuotas.

Leiskite mums išnagrinėti kai kuriuos kitus skirtumus, naudodamiesi palyginimo lentele, parodyta žemiau.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Panašumai
  5. Išvada

Palyginimo diagrama

Palyginimo pagrindas„ArrayList“Vektorius
Pagrindinis„ArrayList“ klasė nėra sinchronizuota.Vektorių klasė yra sinchronizuota.
Palikimo klasė„ArrayList“ yra standartinė kolekcijos klasė.„Vector“ yra sena klasė, perprojektuota palaikyti kolekcijos klasę.
Klasės deklaracijaklasės „ArrayList“klasės vektorius
PerskirstymasKai nenurodyta, „ArrayList“ padidinamas perpus.Kai nenurodyta, vektorius padidinamas, kad jo dydis padidėtų dvigubai.
SpektaklisKadangi „ArrayList“ nėra sinchronizuotas, jis veikia greičiau nei „Vector“.Kadangi „Vector“ sinchronizuojamas, jis veikia lėčiau nei „ArrayList“.
Surašymas / Iteratorius„ArrayList“ naudoja „Iterator“ sąsają, kad aplankytų „ArrayList“ saugomus objektus.„Vektoriai“ naudoja „Enumeration“ ir „Iterator“ sąsają, kad aplankytų „Vektoriuose“ saugomus objektus.


Apibrėžimas ArrayList

„ArrayList“ priklauso standartinių kolekcijos klasių sąrašui. „ArrayList“ klasė yra apibrėžta java.util paketą, jis išplečia „AbstractList“ klasė, kuri taip pat yra standartinė kolekcijos klasė, ir ją taip pat įgyvendina Sąrašas, sąsaja, apibrėžta kolekcijos sąsajose. „Java“ programoje standartinis masyvas visada yra fiksuoto ilgio. Tai reiškia, kad vieną kartą sukurta; jis dinamiškai neauga ir nesitraukia. Taigi, jūs turėtumėte iš anksto žinoti apie naudojamo masyvo ilgį. Bet kartais gali atsitikti taip, kad reikalingas ilgis bus atskleistas vykdant laiką, kad būtų galima išspręsti tokią situaciją, „Java“ pristatė „ArrayList“.

„ArrayList“ yra klasė, naudojama dinaminiam masyvo, kuriame yra nuorodos į objektus, sukūrimui. Šis masyvas gali išaugti, kai to prireiks. Klasės deklaracija yra tokia:

klasės „ArrayList“

Čia E nurodo objektų, kuriuos laikys masyvas, tipą. Sukurtas masyvas yra įvairaus ilgio, o pridedant ar išbraukiant iš sąrašo objektų dydis padidėja ir mažėja.


„ArrayList“ nėra sinchronizuotas, tai reiškia, kad masyve vienu metu gali veikti daugiau nei viena gija. Pvz., Jei viena gija prideda objekto nuorodą į masyvą, o kita gija tuo pačiu metu pašalina objekto nuorodą iš to paties masyvo. Dinaminio masyvo sukūrimas naudojant „ArrayList“ klasę:

„ArrayList“ S1 = naujas „ArrayList“(); System.out.ln („Pradinis S1 dydis:“ + S1.size ()); S1.add („T“); S1.add („C“); S1.add („H“); S1.add (1, „E“); System.out.ln („Po papildymo S1 yra:“ + S1); System.out.ln („S1 dydis po pridėjimo:“ + S1.size ()); S1.remove („T“); S1.remove (2); System.out.ln („Ištrynus S1 yra:“ + S1); System.out.ln („S1 dydis po ištrynimo:“ + S1.size ()); // Išvesties pradinis S1 dydis: 0 Po papildymo S1 yra:; S1 dydis po pridėjimo: 4 Po ištrynimo S1 yra: S1 dydis po išbraukimo: 2

Aukščiau pateiktame kode galite tai pamatyti; Sukūriau eilutės tipo objektų masyvą. Kai kuriuos objektus į masyvą S1 pridėjau naudodamas „add ()“ metodą, vėliau kai kuriuos objektus ištryniau naudodamas „pašalinti ()“ metodą. Galite pastebėti, jei nenurodysite pradinio masyvo dydžio, jo ilgis bus „0“. Kaip matote, masyvas auga ir mažėja, nes pridedate ir ištrinate elementus.

Apibrėžimas Vektorius

„Vector“ yra „Legacy“ klasė, kuri yra pertvarkyta taip, kad palaikytų kolekcijos klasę „Collection Framework“ hierarchijoje. Vektorių klasė taip pat apibrėžta java.util paketas, pratęstas „AbstractList“ klasė ir įgyvendinta Sąrašas sąsaja. Vektorių klasė skelbiama taip:

klasės vektorius

Čia E nurodo objekto, kuris bus saugomas masyve, tipą. Naudojant „Vector“ klasę sukurtas masyvas yra įvairaus ilgio. Jei padidinimas nenurodytas, jis padidėja dvigubai. Supraskime masyvo kūrimą naudojant „Vector“.

Vektorius V = naujas vektorius(1,1); V.addElement („Technika“); V.addElement („Skirtumai“); System.out.ln („Talpa po 2 pridėjimų:“ + V. talpa ()); V.addElement („Tarp“); V.addElement („Vektoriai“); System.out.ln („Dabartinė talpa:“ + V. talpa ()); // Išvesties talpa pridėjus 2: 2 Dabartinė talpa: 4

Aukščiau esančiame kode galite pastebėti, kad aš ypač paminėjau dydžio ir prieaugio reikšmes atitinkamai „Vector“ konstruktoriuje, deklaruodamas eilutės objektų masyvą. Taigi galite pastebėti, kad masyvo ribai pasibaigus, jis padidėja pagal vertę, suteiktą konstruktoriui deklaravimo metu.

  1. „ArrayList“ vienu metu gali veikti keli gijos, todėl manoma nesinchronizuotas. Skirtingai nuo „ArrayList“, vektoriuje vienu metu gali veikti tik viena gija; todėl jis vadinamas Sinchronizuota.
  2. Ankstesnėje „Java“ versijoje kai kurios klasės ir sąsajos užtikrintų objektų, kurie buvo vadinami pasenusiomis klasėmis, saugojimo metodus. Vektorius yra vienas iš „Legacy“ klasės „Java“. Vėliau šios senosios klasės buvo pertvarkytos taip, kad palaikytų kolekcijos klasę, tuo tarpu „ArrayList“ klasė yra standartinė kolekcijos klasė.
  3. Kai masyvo riba yra visiškai išnaudota ir šalia išnaudoto masyvo pridedamas naujas objektas, jo dydis išauga abiem atvejais, ty „ArrayList“ ir „Vector“, tačiau skirtumas yra tas, kad „ArrayList“, jei nenurodytas, dydis padidinamas 50% dabartinio masyvo, tuo tarpu „Vector“ masyvo dydis yra dvigubai didesnis, jei nenurodyta padidėjimo vertė.
  4. „Vektorius“ naudoja masyvą, taip pat „Iterator“, kad aplankytų masyvą, o „ArrayList“ iteratorius naudoja tik masyvo perėjimui.
  5. Kadangi „ArrayList“ yra nesinchronizuotas ir daugelis gijų gali tuo pačiu metu veikti, jo našumas yra geresnis nei „Vector“, kuriame vienu metu gali veikti tik viena gija.

Panašumai:

  1. Tiek „ArrayList“, tiek „Vector“ yra apibrėžti „java.util“ pakete.
  2. „ArrayList“ ir „Vector“ pratęsia „AbsractList“ klasę.
  3. Tiek „ArrayList“, tiek „Vector“ įgyvendina Sąrašo sąsają.
  4. Tiek „ArrayList“, tiek „Vektoriai“ naudojami dinaminiam masyvui, kuris auga pagal poreikį, sukurti.
  5. „ArrayList“ ir „Vector“ turi objekto nuorodas.

Išvada:

Baigdamas sakau, kad naudoti „ArrayList“ yra geriau nei naudoti „Vector“, nes jis veikia greičiau ir geriau.