Масиви срещу Arraylists
Масивите са най-често използваната структура от данни за съхраняване на колекция от елементи. Повечето езици за програмиране предоставят методи за лесно деклариране на масиви и елементи за достъп в масивите. Арралистът може да се разглежда като динамичен масив, който може да нарасне по размер. Поради тази причина програмистът не трябва да знае размера на списъка с паралели, когато го определя.
Какво представляват масивите?
Показаният на фигура 1 е парче код, обикновено използвано за деклариране и присвояване на стойности на масив. Фигура 2 изобразява как би изглеждал масив в паметта.
стойности [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 списъците с аргументи могат да бъдат обхождани с помощта на foreach цикли, итератори или просто с помощта на индексите.
Каква е разликата между Arrays и Arraylists
Въпреки че масивите и списъците с паралели са сходни в смисъл, че и двамата се използват за съхраняване на колекции от елементи, те се различават по начина, по който са дефинирани. Размерът на масива трябва да бъде даден, когато е дефиниран масив, но можете да определите списък с паралели, без да знаете действителния размер. Можете да добавяте елементи към списък с масиви, след като той е дефиниран и това не е възможно с масиви. Но в Java списъците с масиви не могат да съдържат примитивни типове, но масивите могат да се използват за съхранение на примитивни типове. Но ако имате нужда от структура на данни, която може да варира по своя размер, най-добрият избор би бил arraylist.