Масив має фіксований розмір, однорідний структура даних . Обмеження масивів полягає в тому, що вони мають фіксований розмір. Це означає, що при оголошенні масиву ми повинні вказати кількість елементів. Тут виникає запитання: що робити, якщо ми хочемо вставити елемент, а для нового елемента більше не залишиться місця? Тут поняття динамічний масив виникає. Він динамічно збільшує розмір масиву.
У цьому розділі ми розберемося що таке динамічний масив, особливості динамічного масиву, як змінити розмір динамічного масиву, і як реалізувати динамічний масив у Java .
вовк чи лисиця
Що таке динамічний масив?
Динамічний масив - це a змінний розмір структура даних списку. Він автоматично збільшується, коли ми намагаємося вставити елемент, якщо для нового елемента більше не залишилося місця. Це дозволяє нам додавати та видаляти елементи. Він виділяє пам'ять під час виконання за допомогою купи. Він може змінювати свій розмір під час роботи.
в Java , ArrayList це реалізація змінного розміру. Він реалізує інтерфейс списку та надає всі методи, пов’язані з операціями зі списком. Сила динамічного масиву:
- Швидкий пошук
- Змінний розмір
- Кеш-дружній
Робота динамічного масиву
У динамічному масиві елементи зберігаються безперервно від початку масиву, а простір, що залишився, залишається невикористаним. Ми можемо додавати елементи, доки зарезервований інтервал не буде повністю використано. Коли зарезервований простір вичерпано і потрібно додати деякі елементи. У такому випадку необхідно збільшити розмір масиву фіксованого розміру. Зауважте, що перед додаванням елемента ми виділяємо більший масив, копіюємо елементи з масиву та повертаємо новостворений масив.
Інший спосіб додати елемент – спочатку створити функцію, яка створює новий масив подвійного розміру, копіює всі елементи зі старого масиву та повертає новий масив. Так само ми можемо зменшити розмір динамічного масиву.
Розмір проти ємності
Ініціалізація динамічного масиву створює масив фіксованого розміру. На наступному малюнку реалізація масиву має 10 індексів. Ми додали п'ять елементів до масиву. Тепер базовий масив має довжину п’ять. Тому довжина розміру динамічного масиву дорівнює 5, а його ємність — 10. Динамічний масив відстежує кінцеву точку.
Особливості Dynamic Array
У Java динамічний масив має три ключові особливості: Додати елемент, видалити елемент і змінити розмір масиву.
Додати елемент у динамічний масив
У динамічному масиві ми можемо створити масив фіксованого розміру, якщо нам потрібно додати до масиву ще кілька елементів. Зазвичай він створює новий масив подвійного розміру. Після цього він копіює всі елементи у щойно створений масив. Ми використовуємо наступний підхід:
Видалення елемента з динамічного масиву
Якщо ми хочемо видалити елемент із масиву за вказаним індексом, ми використовуємо removeAt(i) метод. Метод аналізує номер індексу того елемента, який ми хочемо видалити. Після видалення елемента він зміщує решту елементів (елементи, розташовані праворуч від видаленого елемента) вліво від зазначеного номера індексу. Ми також використовуємо метод remove(), який видаляє елемент із кінця масиву. Після зміщення елементів він зберігається 0 у палаці останньої стихії. Давайте зрозуміємо це на прикладі, як ми показали на наступному малюнку.
vlc для завантаження youtube
Зміна розміру динамічного масиву в Java
Нам потрібно змінити розмір масиву у двох сценаріях, якщо:
- Масив використовує додаткову пам'ять, ніж потрібно.
- Масив займає всю пам'ять, і нам потрібно додати елементи.
У першому випадку ми використовуємо srinkSize() спосіб зміни розміру масив . Це зменшує розмір масиву. Це звільняє додаткову або невикористану пам'ять. У другому випадку ми використовуємо growSize() метод зміни розміру масиву. Це збільшує розмір масиву.
Це дорога операція, оскільки для неї потрібен більший масив і копіюються всі елементи з попереднього масиву, після чого повертається новий масив.
Припустимо, що в наведеному вище масиві потрібно додати ще шість елементів і в масиві більше не залишилося пам’яті для зберігання елементів. У таких випадках ми збільшуємо масив за допомогою growSize() метод.
Ініціалізація динамічного масиву
Ініціалізація динамічного масиву така ж, як і статичного масиву. Розглянемо наступну програму Java, яка ініціалізує динамічний масив.
InitializeDynamicArray.java
public class InitializeDynamicArray { public static void main(String[] args) { //declaring array int array[]; //initialize an array array= new int[6]; //adding elements to the array array[0] = 34; array[1] = 90; array[2] = 12; array[3] = 22; array[4] = 9; array[5] = 27; System.out.print('Elements of Array are: '); //iteraton over the array for(int i=0; i <array.length ; i++) { system.out.print(array[i] +' '); } < pre> <p> <strong>Output:</strong> </p> <pre> Elements of Array are: 34 90 12 22 9 27 </pre> <p>Let's implement the operations in a Java program that we have discussed above.</p> <p> <strong>DynamicArrayExample1.java</strong> </p> <pre> public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println('Elements of the array:'); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + ' '); } system.out.println(); determines and prints the size number of elements array system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println(' elements after adding 5:'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let's shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count > 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println('elements of array:'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] ' '); system.out.println(); determines and prints size number system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print(' elements element: system.out.print('no. da.count+' '); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;></pre></array.length>
Давайте реалізуємо операції в програмі Java, які ми обговорювали вище.
DynamicArrayExample1.java
public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println('Elements of the array:'); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + \' \'); } system.out.println(); determines and prints the size number of elements array system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println(\' elements after adding 5:\'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let's shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count > 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println(\'elements of array:\'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] \' \'); system.out.println(); determines and prints size number system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print(\' elements element: system.out.print(\'no. da.count+\' \'); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;>