Massiiviloend vs vektor
Massiiviloendit võib vaadelda kui dünaamilist massiivi, mille suurus võib kasvada. Seetõttu ei pea programmeerija seda määratledes teadma massiivide loendi suurust. Vektorit võib vaadelda ka massiivina, mille suurus võib kasvada. Vektorid on hõlpsasti eraldatavad ja nendega saab harjuda, kui salvestusruumi vajalik suurus pole teada enne käitusaega.
Mis on massiivide loend?
Massiiviloendit võib vaadelda kui dünaamilist massiivi, mille suurus võib kasvada. Seetõttu on massiiviloendid ideaalsed kasutamiseks olukordades, kus te ei tea deklareerimise ajal nõutavate elementide suurust. Java-s mahutavad massiivloendid ainult objekte, nad ei saa primitiivseid tüüpe otse hoida (võite primitiivsed tüübid panna objekti sisse või kasutada primitiivsete tüüpide ümbriseklassid). Üldiselt pakutakse massiiviloenditele meetodeid sisestamise, kustutamise ja otsimise teostamiseks. Elemendile juurdepääsu ajaline keerukus on o (1), samas kui sisestamise ja kustutamise ajaline keerukus on o (n). Java-s saab massiiviloendeid läbida foreachi tsüklite, iteraatorite abil või lihtsalt indeksite abil. Javas tutvustati massiiviloendeid versioonist 1.2 ja see on osa Java kollektsioonide raamistikust.
Mis on vektor?
Vektor on ka massiiv, mille suurus võib kasvada. Vektorid on hõlpsasti jaotatavad ja neid saab kasutada, kui salvestusruumi vajalik suurus pole teada enne käitusaega. Vektorid saavad hoida ka ainult objekte ja primitiivseid tüüpe. Vektorid on sünkroniseeritud, seetõttu saab neid mitmikeermelistes keskkondades ohutult kasutada. Vektorid on varustatud meetoditega objektide lisamiseks, objektide kustutamiseks ja objektide otsimiseks. Sarnaselt Java massiiviloendiga saab vektorite läbimiseks kasutada foreachi tsükleid, iteraatoreid või lihtsalt indekse. Java osas on vektorid lisatud Java esimesest versioonist alates.
Mis vahe on arraylistil ja vektoril?
Ehkki nii massiiviloendid kui vektorid on väga sarnased dünaamiliste massiividega, mille suurus võib kasvada, on neil mõned olulised erinevused. Peamine erinevus arraylistide ja vektorite vahel on see, et vektorid on sünkroniseeritud, samas kui arraylistid on sünkroniseerimata. Seetõttu ei sobi massiiviloendite kasutamine mitmekeermelistes keskkondades, samas kui vektoreid saab ohutult kasutada mitmikeermelistes keskkondades (kuna need on niidikindlad). Kuid sünkroniseerimine vektorites põhjustaks jõudluse vähenemist. Seetõttu ei oleks hea mõte kasutada vektoreid ühes keermestatud keskkonnas. Sisemiselt kasutavad nii massiiviloendid kui vektorid massiive objektide hoidmiseks. Kui praegusest ruumist ei piisa, kahekordistavad vektorid oma sisemise massiivi suurust, samal ajal kui massiiviloendid suurendavad sisemise massiivi suurust 50%. Kuid nii massiiviloendite kui ka vektorite kasutamisel saab sobiva algvõimsuse andmisega vältida sisemise massiivi tarbetut suuruse muutmist. Olukorras, kus andmete kasvukiirus on teada, oleks vektorite kasutamine sobivam, kuna saab määratleda vektorite lisaväärtuse.