Arraylist vs Vector
Massiiviloendit võib vaadelda kui dünaamilist massiivi, mille suurus võib kasvada. Seetõttu ei pea programmeerija massiiviloendi suurust selle määratlemisel teadma. Vektorit võib vaadelda ka massiivina, mille suurus võib kasvada. Vektoreid saab hõlpsasti eraldada ja neid saab kasutada siis, kui salvestusruumi vajalik suurus pole enne käitusaega teada.
Mis on massiiviloend?
Massiiviloendit võib vaadelda kui dünaamilist massiivi, mille suurus võib kasvada. Seetõttu on massiiviloendid ideaalsed kasutamiseks olukorras, kus te ei tea deklareerimise ajal nõutavate elementide suurust. Javas saavad massiiviloendid hoida ainult objekte, nad ei saa sisaldada otse primitiivseid tüüpe (saate paigutada primitiivsed tüübid objekti sisse või kasutada primitiivsete tüüpide ümbrisklasse). Üldjuhul on massiiviloendid varustatud meetoditega sisestamise, kustutamise ja otsimise teostamiseks. Elemendile juurdepääsu ajaline keerukus on o(1), samas kui sisestamise ja kustutamise ajaline keerukus on o(n). Javas saab massiiviloendeid läbida foreach-silmuste, iteraatorite või lihts alt indeksite abil. Javas võeti massiiviloendid kasutusele alates versioonist 1.2 ja see on osa Java Collections Frameworkist.
Mis on vektor?
Vektor on ka massiiv, mille suurus võib kasvada. Vektoreid saab hõlpsasti eraldada ja neid saab kasutada siis, kui salvestusruumi vajalik suurus pole enne käitusaega teada. Samuti saavad vektorid hoida ainult objekte ja ei saa sisaldada primitiivseid tüüpe. Vektorid on sünkroonitud, seetõttu saab neid turvaliselt kasutada mitme lõimega keskkondades. Vektorid on varustatud meetoditega objektide lisamiseks, objektide kustutamiseks ja objektide otsimiseks. Sarnaselt Java massiiviloendiga saab vektoreid läbida foreach-silmuste, iteraatorite või lihts alt indeksite abil. Mis puutub Javasse, siis vektorid on kaasatud alates Java esimesest versioonist.
Mis vahe on Arraylistil ja Vectoril?
Kuigi nii massiiviloendid kui ka vektorid on väga sarnased dünaamiliste massiividega, mille suurus võib kasvada, on neil siiski mõned olulised erinevused. Peamine erinevus massiiviloendite ja vektorite vahel on see, et vektorid on sünkroonitud, samas kui massiiviloendid on sünkroonimata. Seetõttu ei sobi massiiviloendite kasutamine mitme lõimega keskkondades, samas kui vektoreid saab mitmelõimega keskkondades ohutult kasutada (kuna need on lõimekindlad). Kuid vektorite sünkroonimine vähendaks jõudlust. Seetõttu ei oleks hea mõte kasutada vektoreid ühes keermestatud keskkonnas. Sisemiselt kasutavad nii massiiviloendid kui ka vektorid massiive objektide hoidmiseks. Kui praegusest ruumist ei piisa, kahekordistavad vektorid selle sisemise massiivi suurust, samas kui massiiviloendid suurendavad selle sisemise massiivi suurust 50%. Kuid nii massiiviloendeid kui ka vektoreid kasutades saab sobiva algvõimsuse andmisega vältida sisemise massiivi tarbetut suuruse muutmist. Olukorras, kus andmete kasvukiirus on teada, oleks vektorite kasutamine sobivam, kuna vektorite inkrementaalse väärtuse saab defineerida.