Uurime mõningaid muid erinevusi allpool toodud võrdluskaardi abil.
Võrdluskaart
Võrdluse alus | ArrayList | Vektor |
---|---|---|
Põhiline | ArrayListi klass ei ole sünkroonitud. | Vektoriklass on sünkroniseeritud. |
Pärandklass | ArrayList on tavaline kollektsiooniklass. | Vector on pärandklass, mis on ümberehitatud, et toetada kogumisklassi. |
Klasside deklaratsioon | klass ArrayList | klassi vektor |
Ümberjaotamine | Kui seda ei ole määratud, suurendatakse ArrayListi poole võrra. | Kui seda pole täpsustatud, suurendatakse vektorit, et kahekordistada selle suurust. |
Toimivus | Kuna ArrayList on sünkroniseerimata, töötab see kiiremini kui Vector. | Kuna vektor on sünkroniseeritud, toimib see aeglasemalt kui ArrayList. |
Loend / Iterator | ArrayList kasutab ArterListis salvestatud objektide läbimiseks Iteratori liidest. | Vektor kasutab vektorites salvestatud objektide läbisõiduks nii loendamist kui ka Iteraatori liidest. |
ArrayListi määratlus
ArrayList kuulub standardsete kogumisklasside nimekirja. Klass ArrayList on määratletud java.util paketi sees, see laiendab AbstractListi klassi, mis on ka tavaline kogumisklass, ning rakendab ka nimekirja, liidese, mis on määratletud kogumiku liideses. Java puhul on standardmass alati kindlaksmääratud pikkusega. See tähendab, et see on loodud; see ei suurene dünaamiliselt ega kahaneb. Niisiis peaksite kasutama eelnevalt massiivi pikkust. Kuid mõnikord võib juhtuda, et nõutav pikkus ilmneb käitusajal, et seda olukorda käsitleda java tutvustas ArrayListi.
ArrayList on klass, mida kasutatakse massiivi dünaamiliseks loomiseks, millel on viited objektidele. See massiiv võib kasvada vastavalt vajadusele. Klassideklaratsioon on järgmine:
klass ArrayList
Siin määrab E massiivi objektide tüübi. Loodud massiiv on erineva pikkusega ning see suureneb ja väheneb, kui objektid loendist lisatakse või eemaldatakse.
ArrayList ei ole sünkroniseeritud, mis tähendab, et rohkem kui üks lõng võib massiivis samaaegselt töötada. Näiteks, kui üks lõime lisab massiivi objektile viite ja teine niit eemaldab ühest ja samast massiivist objekti viite samal ajal. Dünaamilise massiivi loomine ArrayListi klassi abil:
ArrayList S1 = uus ArrayList (); System.out.println ("S1 esialgne suurus:" + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.println ("Pärast lisamist S1 sisaldab:" + S1); System.out.println ("S1 suurus pärast lisamist:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Pärast kustutamist S1 sisaldab:" + S1); System.out.println ("S1 suurus pärast kustutamist:" + S1.size ()); // S1 väljundsisaldus: 0 Pärast lisamist sisaldab S1: [T, E, C, H]; S1 suurus pärast lisamist: 4 Pärast deletsiooni S1 sisaldab: [E, H] S1 suurus pärast deletsiooni: 2
Ülaltoodud koodis näete seda; Ma lõin rea stringi tüüpi objekte. Lisasin masinale S1 mõned objektid, kasutades lisa () meetodit ja hiljem kustutasin mõned objektid eemaldamise () meetodi abil. Saate jälgida, kas te ei määra massi algsuurust, mille pikkus on '0'. Nagu näete, kasvab ja vähendab elementide arvu lisamisel ja kustutamisel massiiv.
Vektori määratlus
Vektor on pärandklass, mis on ümberehitatud, et toetada kogumisklassi kogumise raamistiku hierarhias. Vektoriklass on määratletud ka java.util paketis, mida laiendatakse AbstractList klassi poolt ja rakendatakse loendiliidese abil. Vektoriklass on deklareeritud järgmiselt:
klassi vektor
Siin määratleb E massiivi salvestatava objekti tüübi. Vektoriklassi abil loodud massiiv on erineva pikkusega. Kui juurdekasvu ei ole täpsustatud, suureneb see kahekordselt. Mõistame massiivi loomist vektori abil.
Vektor V = uus vektor (1, 1); V.addElement ("Tech"); V.addElement ("Erinevused"); System.out.println ("Mahutavus pärast 2 lisamist:" + V. võimsus ()); V.addElement ("vahel"); V.addElement ("vektorid"); System.out.println ("Praegune maht:" + V. võimsus () "; // Väljundvõimsus pärast 2 lisamist: 2 Jooksev maht: 4
Ülaltoodud koodis näete, et mainisin eriti vektori konstruktori suurust ja juurdekasvu väärtust, deklareerides stringi objektide massiivi. Seega võite jälgida, et massiivi piirina suureneb see deklaratsiooni esitamisel konstruktorile antud väärtuse võrra.
Peamised erinevused ArrayListi ja vektorite vahel
- Samal ajal võib ArrayListil töötada mitu lõnga, mistõttu seda peetakse sünkroniseerimata . Erinevalt ArrayListist saab vektoril korraga töötada ainult üks lõime; seega nimetatakse seda sünkroniseeritud .
- Java varases versioonis pakuksid mõned klassid ja liidesed objektide salvestamise meetodeid, mida neid nimetati pärandklassideks. Hiljem muudeti need pärandklassid kollektsiooniklassi toetuseks, samas kui ArrayList klass on tavaline kollektsiooniklass.
- Kui massiivi piir on täielikult ära kasutatud ja uue objekti juurde lisatakse ammendunud massiivi kõrval, suureneb selle suurus mõlemal juhul nii ArrayList kui ka vektoris, kuid erinevus on see, et ArrayListis, kui pole määratud suurust seda suurendatakse 50% võrra praegusest massiivist, samas kui vektori massiivi suurus on kahekordistunud, kui juurdekasvu väärtust ei ole täpsustatud.
- Vektor kasutab massiivi läbimiseks nii loendamist kui ka Iteratorit, samas kui ArrayList kasutab massiivi läbimiseks ainult iteraatorit.
- Kuna ArrayList on Unsynchronized ja paljud niidid võivad samal ajal töötada, on selle jõudlus parem kui Vector, mille korral saab korraga töötada ainult üks niit.
Sarnasused:
- ArrayList ja Vector mõlemad on määratletud java.util paketis.
- ArrayList ja Vector mõlemad laiendavad AbsractListi klassi.
- ArrayList ja Vector mõlemad rakendavad Listi liidest.
- ArrayListi ja Vektoreid kasutatakse selleks, et luua dünaamiline massiiv, mis kasvab vastavalt vajadusele.
- ArrayList ja Vector mõlemad hoiavad objekti viiteid.
Järeldus:
Lõpetuseks ütlen, et ArrayListi kasutamine on parem kui Vectori kasutamine kiiremini ja paremini.