Taulukko vs. vektori
Taulukkoa voidaan nähdä dynaamisena taulukona, jonka koko voi kasvaa. Tästä syystä ohjelmoijan ei tarvitse tietää taulukkolistan kokoa määritellessään sitä. Vektori voidaan nähdä myös matriisina, jonka koko voi kasvaa. Vektorit voidaan helposti allokoida ja niitä voidaan käyttää, kun tarvittavaa tallennustilan kokoa ei tiedetä ennen ajonaikaa.
Mikä on taulukko?
Taulukkoa voidaan nähdä dynaamisena taulukona, jonka koko voi kasvaa. Siksi taulukot ovat ihanteellisia käytettäväksi tilanteissa, joissa et tiedä vaadittavien elementtien kokoa ilmoituksen tekohetkellä. Java-sovelluksessa taulukkoluettelot voivat pitää sisällään vain objekteja, eivätkä ne voi pitää alkeistyyppejä suoraan (voit laittaa primitiiviset tyypit objektin sisälle tai käyttää primitiivisten tyyppien käärintäluokkia). Yleensä ryhmäluettelot toimitetaan menetelmillä lisäyksen, poistamisen ja haun suorittamiseksi. Elementin käytön aikakompleksi on o (1), kun taas lisäyksen ja poiston aikakompleksisuus on o (n). Java-ohjelmassa taulukkoluettelot voidaan kulkea käyttämällä foreach-silmukoita, iteraattoreita tai yksinkertaisesti käyttämällä hakemistoja. Java-sovelluksessa taulukot otettiin käyttöön versiosta 1.2, ja se on osa Java-kokoelmakehystä.
Mikä on vektori?
Vektori on myös joukko, jonka koko voi kasvaa. Vektorit voidaan jakaa helposti ja niitä voidaan käyttää, kun tarvittavaa tallennustilan kokoa ei tiedetä ennen ajonaikaa. Vektorit voivat myös pitää vain esineitä eivätkä primitiivisiä tyyppejä. Vektorit ovat synkronoituja, joten niitä voidaan käyttää turvallisesti monisäikeisissä ympäristöissä. Vektorit toimitetaan menetelmillä lisätä esineitä, poistaa objekteja ja etsiä objekteja. Kuten java-taulukossa, vektorit voidaan kulkea käyttämällä foreach-silmukoita, iteraattoreita tai yksinkertaisesti indeksit. Javan suhteen vektorit ovat olleet mukana Java: n ensimmäisestä versiosta lähtien.
Mitä eroa on Arraylistilla ja Vectorilla?
Vaikka sekä ryhmälistat että vektorit ovat hyvin samanlaisia kuin dynaamiset taulukot, joiden koko voi kasvaa, niillä on joitain tärkeitä eroja. Tärkein ero ryhmälistojen ja vektorien välillä on, että vektorit ovat synkronoituja, kun taas taulukot ovat synkronoimattomia. Siksi matriisilistojen käyttö monisäikeisissä ympäristöissä ei ole tarkoituksenmukaista, kun taas vektoreita voidaan käyttää turvallisesti monisäikeisissä ympäristöissä (koska ne ovat langattomia). Mutta vektorien synkronointi johtaisi suorituskyvyn heikkenemiseen. Siksi ei olisi hyvä käyttää vektoreita yhdessä kierteisessä ympäristössä. Sisäisesti sekä ryhmälistat että vektorit käyttävät taulukoita objektien pitämiseen. Kun nykyinen tila ei riitä, vektorit kaksinkertaistavat sisäisen taulukonsa, kun taas taulukot lisäävät sen sisäisen ryhmän kokoa 50%. Mutta kun käytetään sekä ryhmäluetteloita että vektoreita, antamalla sopiva alkukapasiteetti voidaan välttää sisäisen ryhmän tarpeeton koon muuttaminen. Tilanteessa, jossa datan kasvunopeus tunnetaan, vektorien käyttö olisi sopivampaa, koska vektorien inkrementaaliarvo voitaisiin määritellä.