J: Vector vai ArrayList - kas ir labāks un kāpēc?
A: Dažreiz Vector
ir labāk; dažreiz ArrayList
ir labāk; dažreiz jūs arī nevēlaties izmantot. Es ceru, ka jūs nemeklējāt vieglu atbildi, jo atbilde ir atkarīga no tā, ko jūs darāt. Jāņem vērā četri faktori:
- API
- Sinhronizācija
- Datu pieaugums
- Lietošanas modeļi
Izpētīsim katru pēc kārtas.
API
In Java programmēšanas valoda (Addison-Wesley, 2000. gada jūnijs) Kens Arnolds, Džeimss Goslings un Deivids Holmss apraksta Vector
kā analogs ArrayList
. Tātad no API viedokļa abas klases ir ļoti līdzīgas. Tomēr starp abām klasēm joprojām pastāv dažas būtiskas atšķirības.
Sinhronizācija
Vektori
tiek sinhronizēti. Jebkura metode, kas skar Vector
saturs ir drošs ar diegu. ArrayList
, no otras puses, nav sinhronizēts, tādēļ tie nav droši pavedieni. Paturot prātā šo atšķirību, izmantojot sinhronizāciju, tiks sasniegts veiktspējas rezultāts. Tāpēc, ja jums nav nepieciešama vītnei droša kolekcija, izmantojiet ArrayList
. Kāpēc nevajadzīgi jāmaksā sinhronizācijas cena?
Datu pieaugums
Iekšēji gan ArrayList
un Vector
turiet to saturu, izmantojot Masīvs
. Lietojot kādu no savām programmām, jums tas jāpatur prātā. Kad elementā ievietojat elementu ArrayList
vai a Vector
, objektam būs jāpaplašina iekšējais masīvs, ja tas beigsies no vietas. A Vector
pēc noklusējuma divkāršo tā masīva lielumu, bet ArrayList
palielina masīva lielumu par 50 procentiem. Atkarībā no tā, kā jūs izmantojat šīs klases, jūs varat iegūt lielu veiktspējas rezultātu, vienlaikus pievienojot jaunus elementus. Vienmēr vislabāk ir iestatīt objekta sākotnējo jaudu uz lielāko jaudu, kas būs nepieciešama jūsu programmai. Rūpīgi iestatot jaudu, jūs varat izvairīties no soda maksāšanas, kas vajadzīgs, lai vēlāk mainītu iekšējā masīva izmēru. Ja nezināt, cik daudz datu jums būs, bet jūs zināt to pieauguma ātrumu, Vector
ir neliela priekšrocība, jo jūs varat iestatīt pieauguma vērtību.
Lietošanas modeļi
Gan ArrayList
un Vector
ir piemēroti elementu izgūšanai no noteiktas vietas konteinerā vai elementu pievienošanai un noņemšanai no konteinera gala. Visas šīs darbības var veikt nemainīgā laikā - O (1). Tomēr elementu pievienošana un noņemšana no jebkuras citas vietas izrādās dārgāka - precīzi lineāra: O (n-i), kur n ir elementu skaits un i ir pievienotā vai noņemtā elementa indekss. Šīs operācijas ir dārgākas, jo indeksā ir jāpārvieto visi elementi i un augstāk par vienu elementu. Ko tad tas viss nozīmē?
Tas nozīmē, ka, ja vēlaties indeksēt elementus vai pievienot un noņemt elementus masīva beigās, izmantojiet vai nu a Vector
vai an ArrayList
. Ja vēlaties darīt kaut ko citu attiecībā uz saturu, dodieties uz citu konteineru klasi. Piemēram, LinkedList
var pievienot vai noņemt elementu jebkurā pozīcijā nemainīgā laikā - O (1). Tomēr elementa indeksēšana ir nedaudz lēnāka - O (i) kur i ir elementa indekss. Šķērsošana ArrayList
ir arī vienkāršāk, jo jūs varat vienkārši izmantot indeksu, nevis izveidot iteratoru. The LinkedList
katram iekšējam elementam izveido arī iekšēju objektu. Tāpēc jums jāapzinās radītie papildu atkritumi.
Visbeidzot, "PRAXIS 41" no Praktiskā Java (Addison-Wesley, 2000. gada februāris.) Pīters Haggars iesaka jums izmantot vienkāršu veco masīvu vai nu Vector
vai ArrayList
- it īpaši attiecībā uz veiktspējas kritisko kodu. Izmantojot masīvu, jūs varat izvairīties no sinhronizācijas, papildu metožu izsaukumiem un neoptimāla izmēru maiņas. Jūs vienkārši apmaksājat papildu izstrādes laika izmaksas.
Uzziniet vairāk par šo tēmu
- Java programmēšanas valoda Kens Arnolds, Džeimss Goslings un Deivids Holmss (Addison-Wesley, 2000. gada jūnijs; ISBN0201704331)
//www.amazon.com/exec/obidos/ASIN/0201704331/javaworld/
- Praktiskā Java Pīters Haggars (Addison-Wesley, 2000. gada februāris; ISBN0201616467)
//www.amazon.com/exec/obidos/ASIN/0201616467/javaworld/
- Vēlas vairāk? Skatīt Java jautājumi un atbildes Pilna jautājumu un atbilžu kataloga indekss
//www.javaworld.com/javaworld/javaqa/javaqa-index.html
- Lai iegūtu vairāk nekā 100 ieskatīgus Java padomus no labākajiem biznesa prātiem, apmeklējiet vietni JavaWorld 's Java padomi indekss
//www.javaworld.com/javatips/jw-javatips.index.html
- Pierakstieties JavaWorld šonedēļ bezmaksas iknedēļas e-pasta biļetens par jaunumiem JavaWorld
//idg.net/jw-subscribe
Šis stāsts "Vector vai ArrayList - kas ir labāks?" sākotnēji to publicēja JavaWorld.