Nii Array kui ka ArrayList on indeksipõhised andmestruktuurid, mida sageli kasutatakse Java programmides. Kontseptuaalselt on ArrayList sisemiselt massiividega tagatud, kuid Java suureks arendajaks saamise võti on nende kahe erinevuse mõistmine. See on üsna lihtne samm alustamiseks, eriti algajatele, kes on just kodeerimisega alustanud. Ehkki mõlemat kasutatakse Java elementide salvestamiseks, mis võivad olla kas primitiivid või objektid, on neil funktsioonide ja jõudluse erinevuste osas õiglane osa. Peamine erinevus nende kahe vahel on see, et massiiv on staatiline, samas kui ArrayList on oma olemuselt dünaamiline. Selles artiklis võrreldakse neid kahte erinevas aspektis, nii et saate valida ühe teise asemel.
Üks peamisi ja märgatavaid erinevusi kahe andmestruktuuri vahel on see, et massiiv on olemuselt staatiline, mis tähendab, et see on fikseeritud pikkusega andmetüüp, samas kui ArrayList on dünaamilise olemusega, mis tähendab, et see on muutuva pikkusega andmestruktuur. Tehnilises mõttes ei saa massiivi pikkust pärast massiivi objekti loomist muuta ega muuta. See sisaldab sama andmetüübi elementide järjestikust kogumist. Java massiivid töötavad erinevalt C / C ++ funktsioonidest. ArrayList seevastu saab ise suurust muuta ja massiivid võivad kasvada vastavalt vajadusele. Kuna tegemist on dünaamilise andmestruktuuriga, saab elemente loendist lisada ja eemaldada.
Java-s ei saa luua liideste üldklasside massiive, nii et massiivid ja geneerikad ei käi käsikäes, mis muudab geneerilise massiivi loomise võimatuks ühel peamisel põhjusel, et massiivid on kovariantsed, samas kui geneerilised tooted on invariantsed. Ehkki massiiv on fikseeritud pikkusega andmestruktuur, sisaldab see sama klassi objekte või konkreetse andmetüübi primitiive. Nii et kui proovite salvestada Array objekti loomisel teistsugust andmetüüpi kui see, mis on täpsustatud, viskab see lihtsalt välja ArrayStoreException. ArrayList seevastu toetab tüübi ohutuse tagamiseks Genericat.
Primitiivsed andmetüübid, näiteks int, topelt, pikk ja char, pole ArrayList lubatud. See hoiab pigem objekte ja primitiivseid ei peeta Java objektideks. Massiivid seevastu mahutavad nii Java primitiivid kui ka objektid, kuna see on Java üks tõhusamaid andmestruktuure objektide hoidmiseks. See on koondatud andmetüüp, mis on loodud hoidma objekte, mis võivad olla sama tüüpi või erinevat tüüpi.
Massiivi pikkuse saamiseks peab kood pääsema juurde atribuudile pikkus, kuna massiivis toimingute tegemiseks peab teadma pikkust. Ehkki ArrayList kasutab ArrayListi suuruse määramiseks meetodit size (), erineb see massiivi pikkuse määramisest pigem. Suuruse () meetodi atribuut määrab elementide arvu ArrayListis, mis omakorda on ArrayListi mahutavus.
Näiteks:
avalik klass ArrayLengthTest
avalik staatiline tühine pea (string [] args)
ArrayList arrList = uus ArrayList ();
Keelpill [] üksused = “üks”, “kaks”, “kolm”;
jaoks (keelpill: artiklid)
arrList.add (str);
int suurus = üksused.suurus ();
System.out.println (suurus);
Massiiv on Java loomulik programmeerimiskomponent, mis luuakse dünaamiliselt ja nad kasutavad elementide hoidmiseks määramisoperaatorit, ArrayList aga kasutab elementide lisamiseks atribuuti add (). ArrayList on Java kogumisraamistiku klass, mis kasutab elementide juurde pääsemiseks ja muutmiseks määratletud meetodite komplekti. ArrayListi suurust saab dünaamiliselt suurendada või vähendada. Massiivi elemente hoitakse külgnevas mälukohas ja selle suurus püsib kogu aeg staatiline.
Ehkki mõlemad andmestruktuurid pakuvad sarnast jõudlust, kuna ArrayList toetab massiive, on ühel üks teine võrreldes teisega enamasti protsessori aja ja mälukasutuse osas. Oletame, et kui teate massiivi suurust, lähete tõenäoliselt ArrayListi juurde. Massiivi iteratsioon on siiski pisut kiirem kui Massiivi listi iteratsioon. Kui programm hõlmab suurt hulka primitiivseid elemente, toimib massiiv nii aja kui ka mälu osas oluliselt paremini kui ArrayList. Massiivid on madala taseme programmeerimiskeel, mida saab kasutada kogude juurutamisel. Toimivus võib olenevalt teostatavast toimingust erineda.
Massiiv | ArrayList |
Massiiv on fikseeritud pikkusega andmestruktuur, mille pikkust ei saa massiivi objekti loomisel muuta. | ArrayList on oma olemuselt dünaamiline, mis tähendab, et ta saab vajaduse korral end kasvatada. |
Massiivi suurus on kogu programmi vältel staatiline. | ArrayListi suurus võib dünaamiliselt kasvada, sõltuvalt koormusest ja mahust. |
Elementide salvestamiseks kasutab see määramisoperaatorit. | Elementide lisamiseks kasutab see atribuuti add (). |
See võib sisaldada nii algupäraseid elemente kui ka sama või erinevat tüüpi andmesubjekte. | Primitiivid pole ArrayListis lubatud. See võib sisaldada ainult objekti tüüpe. |
Massiivid ja geneerikud ei käi käsikäes. | Geneerilised tooted on ArrayListis lubatud. |
Massiivid võivad olla mitmemõõtmelised. | ArrayList on ühemõõtmeline. |
See on loomulik programmeerimiskomponent, kus elemendid salvestatakse külgnevates mälukohtades. | See on klass Java kogude raamistikust, kus objekte ei salvestata kunagi külgnevates kohtades. |
Massiivi pikkuse määramiseks kasutatakse pikkuse muutujat. | ArrayListi suuruse määramiseks kasutatakse suurust (). |
Määratud elementide või objektide salvestamiseks võtab vähem mälu kui ArrayList. | Objektide salvestamiseks võtab rohkem mälu kui massiiv. |
Massiivi iteratsioon on kiirem kui massiiviloendi iteratsioon. | ArrayListi kohal jäljendamine on toimivuse osas märkimisväärselt aeglasem. |
Ehkki mõned võivad arvata, et massiivide rakendamine programmis võib tulemusi saada kiiremini, kui teha sama programmi ArrayLists abil sel lihtsal põhjusel, et massiivid on madala tasemega andmestruktuur, võib toimivus varieeruda sõltuvalt sellest, millist toimingut teete. Noh, massiivi pikkus on fikseeritud, samas kui ArrayListi suurust saab dünaamiliselt suurendada või vähendada, nii et ArrayListil on funktsionaalsuse osas massiivist pisut parem eelis. Vaatamata erinevustele on neil ka teatavaid sarnasusi. Mõlemad on Java-s indeksipõhised andmestruktuurid, mis võimaldavad teil objekte salvestada, ja mõlemad võimaldavad nii nullväärtusi kui ka duplikaate. Noh, kui teate juba objektide suurust, peaksite minema massiiviga ja kui te pole selles suuruses kindel, pöörduge ArrayListi poole.