Масиви срещу Arraylists
Масивите са най-често използваната структура на данни за съхраняване на колекция от елементи. Повечето езици за програмиране предоставят методи за лесно деклариране на масиви и достъп до елементи в масивите. Масивът може да се разглежда като динамичен масив, който може да нарасне в размер. Поради тази причина, програмистът не трябва да знае размера на масива, когато тя го определя.
Какво представляват масивите?
Показан на фигура 1, е парче код, който обикновено се използва за деклариране и присвояване на стойности на масив. Фигура 2 изобразява как би изглеждал масив в паметта.
int стойности [5]; стойности [0] = 100; стойности [1] = 101; стойности [2] = 102; стойности [3] = 103; стойности [4] = 104; |
Фигура 1: Код за деклариране и присвояване на стойности на масив
100 | 101 | 102 | 103 | 104 |
Индекс: 0 | 1 | 2 | 3 | 4 |
Фигура 2: Масив, запазен в паметта
По-горе код определя масив, който може да съхранява 5 цели числа и до тях се осъществява достъп с помощта на индекси от 0 до 4. Едно важно свойство на масива е, че целият масив е разпределен като един блок памет и всеки елемент получава собствено пространство в масива , След като бъде определен масив, неговият размер е фиксиран. Така че, ако не сте сигурни в размера на масива по време на компилиране, ще трябва да определите достатъчно голям масив, за да бъдете в безопасната страна. Но в повечето случаи всъщност ще използваме по-малък брой елементи, отколкото сме разпределили. Значи значителна част от паметта всъщност се губи. От друга страна, ако „достатъчно големият масив“ всъщност не е достатъчно голям, програмата ще се срине.
Какво представляват Arraylists?
Масивът може да се разглежда като динамичен масив, който може да нарасне в размер. Следователно, масивите от масиви са идеални за използване в ситуация, в която не знаете размера на елементите, необходими в момента на деклариране. В Java масивите могат да държат само обекти, те не могат да държат директно примитивни типове (можете да поставите примитивните типове вътре в обект или да използвате класовете за обвиване на примитивните типове). Обикновено архелистите са снабдени с методи за извършване на вмъкване, изтриване и търсене. Времевата сложност за достъп до елемент е o (1), докато вмъкването и изтриването има сложност във времето o (n). В Java, масивите могат да бъдат преместени с помощта на предни цикли, итератори или просто с помощта на индекси.
Каква е разликата между Arrays и Arraylists
Въпреки че масивите и масивите са сходни по смисъла, че и двамата се използват за съхраняване на колекции от елементи, те се различават по начина, по който са дефинирани. Размерът на масива трябва да бъде даден, когато масивът е дефиниран, но можете да определите масив, без да знаете действителния размер. Можете да добавите елементи към масив, след като е дефиниран и това не е възможно с масиви. Но в Java масивите не могат да държат примитивни типове, но масивите могат да се използват за съхраняване на примитивни типове. Но ако се нуждаете от структура на данни, която може да варира неговия размер, arraylist би бил най-добрият избор.