Аррейлист vs Вектор
Массивди динамикалык массив катары көрүүгө болот, анын көлөмү чоңоюшу мүмкүн. Ушул себептен улам, программист массивдик тизмени аныктап жатканда анын өлчөмүн билүүгө муктаж эмес. Векторду көлөмү чоңоюучу массив катары да көрүүгө болот. Векторлорду оңой бөлүштүрсө болот жана сактагычтын керектүү өлчөмү иштөө убактысына чейин белгисиз болгондо колдонсо болот.
Аррейлист деген эмне?
Массивди динамикалык массив катары көрүүгө болот, анын көлөмү чоңоюшу мүмкүн. Демек, массив тизмелери декларация учурунда талап кылынган элементтердин өлчөмүн билбеген кырдаалда колдонуу үчүн идеалдуу. Java тилинде массив тизмелери объекттерди гана кармай алат, алар примитивдик типтерди түздөн-түз кармай алышпайт (сиз примитивдик типтерди объекттин ичине киргизсеңиз болот же примитивдүү типтердин орогуч класстарын колдоно аласыз). Жалпысынан массив тизмелери киргизүү, жок кылуу жана издөө ыкмалары менен камсыз кылынат. Элементке жетүүнүн убакыт татаалдыгы o(1), ал эми киргизүү жана жок кылууда o(n) убакыт татаалдыгы бар. Java тилинде массив тизмелерин foreach циклдери, итераторлор же жөн эле индекстер аркылуу өтсө болот. Java'да массив тизмелери 1.2 версиясынан баштап киргизилген жана ал Java Collections Framework'дун бир бөлүгү.
Вектор деген эмне?
Вектор дагы көлөмү чоңоюучу массив. Векторлорду оңой бөлүштүрсө болот жана сактагычтын керектүү өлчөмү иштөө убактысына чейин белгисиз болгондо колдонулушу мүмкүн. Векторлор дагы объекттерди гана кармай алат жана примитивдүү типтерди кармай албайт. Векторлор шайкештештирилген, ошондуктан көп чөйрөлөрдө коопсуз колдонсо болот. Векторлор объекттерди кошуу, объекттерди жок кылуу жана объекттерди издөө ыкмалары менен камсыз кылынат. Javaдагы arraylist сыяктуу векторлорду foreach циклдери, итераторлор же жөн эле индекстер аркылуу өтсө болот. Java жөнүндө сөз болгондо, векторлор Java биринчи версиясынан бери камтылган.
Аррейлист менен Вектордун ортосунда кандай айырма бар?
Массив тизмелери да, векторлор да көлөмү чоңоюучу динамикалык массивдерге абдан окшош болсо да, алардын айрым маанилүү айырмачылыктары бар. Массив тизмелери менен векторлордун негизги айырмасы - векторлор синхрондолуп, ал эми аррейлисттер синхрондолбогон. Ошондуктан көп агымдуу чөйрөлөрдө массив тизмелерин колдонуу ылайыктуу эмес, ал эми векторлорду көп агымдуу чөйрөлөрдө коопсуз колдонууга болот (анткени алар жип коопсуз). Бирок векторлордогу синхрондоштуруу өндүрүмдүүлүктүн төмөндөшүнө алып келет. Ошондуктан векторлорду бир жиптүү чөйрөдө колдонуу жакшы идея эмес. Ичинде, массивдер да, векторлор да объекттерди кармоо үчүн массивдерди колдонушат. Учурдагы мейкиндик жетишсиз болгондо, векторлор анын ички массивинин өлчөмүн эки эсеге, ал эми массивдер анын ички массивинин өлчөмүн 50% га көбөйтөт. Бирок массив тизмелерин да, векторлорду да колдонууда, ылайыктуу баштапкы кубаттуулукту берүү менен, ички массивдин керексиз өлчөмүн өзгөртүүдөн качууга болот. Маалыматтардын өсүү темпи белгилүү болгон кырдаалда векторлорду колдонуу ылайыктуураак, анткени векторлордун кошумча маанисин аныктоого болот.