Arraylist vs Vector
Matriisilistaa voidaan pitää dynaamisena taulukkona, jonka koko voi kasvaa. Tästä syystä ohjelmoijan ei tarvitse tietää taulukon kokoa määrittäessään sitä. Vektori voidaan nähdä myös taulukkona, jonka koko voi kasvaa. Vektorit voidaan allokoida helposti ja niitä voidaan käyttää silloin, kun tarvittava tallennustilan koko on tiedossa vasta ajon aikana.
Mikä on Arraylist?
Matriisilistaa voidaan pitää dynaamisena taulukkona, jonka koko voi kasvaa. Siksi taulukkolistat ovat ihanteellisia käytettäväksi tilanteessa, jossa et tiedä vaadittujen elementtien kokoa ilmoitushetkellä. Javassa taulukkolistat voivat sisältää vain objekteja, ne eivät voi sisältää primitiivityyppejä suoraan (voit laittaa primitiivityypit objektin sisään tai käyttää primitiivityyppien kääreluokkia). Yleensä taulukkoluettelot tarjoavat menetelmiä lisäyksen, poiston ja haun suorittamiseksi. Elementin käytön aika monimutkaisuus on o(1), kun taas lisäyksen ja poistamisen aikamonimutkaisuus on o(n). Javassa taulukkolistat voidaan kulkea käyttämällä foreach-silmukoita, iteraattoreita tai yksinkertaisesti indeksejä. Javassa taulukkolistat otettiin käyttöön versiosta 1.2 alkaen ja se on osa Java Collections Frameworkia.
Mikä on vektori?
Vektori on myös joukko, jonka koko voi kasvaa. Vektorit ovat helposti allokoitavissa ja niitä voidaan käyttää, kun tarvittava tallennustilan koko on tiedossa vasta ajon aikana. Vektorit voivat myös sisältää vain esineitä, eivätkä primitiivityyppejä. Vektorit ovat synkronoituja, joten niitä voidaan käyttää turvallisesti monisäikeisissä ympäristöissä. Vektorit sisältävät menetelmiä objektien lisäämiseen, poistamiseen ja objektien etsimiseen. Kuten Javassa arraylist, vektorit voidaan kulkea käyttämällä foreach-silmukoita, iteraattoreita tai yksinkertaisesti indeksejä. Mitä tulee Javaan, vektorit on sisällytetty Javaan ensimmäisestä versiosta lähtien.
Mitä eroa on Arraylistin ja Vectorin välillä?
Vaikka sekä taulukkolistat että vektorit ovat hyvin samank altaisia kuin dynaamiset taulukot, joiden koko voi kasvaa, niillä on joitain tärkeitä eroja. Suurin ero taulukkoluetteloiden ja vektoreiden välillä on, että vektorit ovat synkronoituja, kun taas taulukkoluettelot ovat synkronoimattomia. Siksi taulukkoluetteloiden käyttö monisäikeisissä ympäristöissä ei ole sopivaa, kun taas vektoreita voidaan käyttää turvallisesti monisäikeisissä ympäristöissä (koska ne ovat säikeen turvallisia). Mutta vektoreiden synkronointi heikentäisi suorituskykyä. Siksi ei olisi hyvä idea käyttää vektoreita yhdessä kierteitetyssä ympäristössä. Sisäisesti sekä taulukkolistat että vektorit käyttävät taulukoita objektien säilyttämiseen. Kun nykyinen tila ei riitä, vektorit kaksinkertaistavat sisäisen taulukon koon, kun taas taulukkolistat lisäävät sen sisäisen taulukon kokoa 50%. Mutta käytettäessä sekä taulukkoluetteloita että vektoreita antamalla sopiva alkukapasiteetti voidaan välttää tarpeeton sisäisen taulukon koon muuttaminen. Tilanteessa, jossa tiedon kasvunopeus on tiedossa, vektorien käyttö olisi sopivampaa, koska vektorien inkrementaalinen arvo voitaisiin määritellä.