Programmēšana

Vector vai ArrayList - kas ir labāks?

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 Vectorsaturs 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.

$config[zx-auto] not found$config[zx-overlay] not found