Настроюваний ArrayList у Java
Перш ніж продовжити далі, давайте швидко переглянемо концепцію масиви і ArrayList швидко. Тож у Java ми бачили, що масиви — це лінійні структури даних, що забезпечують функціональність для безперервного додавання елементів у адресний простір пам’яті, тоді як ArrayList — це клас, що належить до структури Collection. Будучи хорошим програмістом, людина вже знає про використання ArrayList над масивами, незважаючи на те, що знає різницю між цими двома. Тепер, якщо рухатися вперед, навіть із ArrayList з’являється функція передачі типу даних елементів, які мають зберігатися в ArrayList, будь то рядок об’єкта integer double float тощо.
Синтаксис:
Arraylistal = new ArrayList ; Примітка: ArrayList в Java (еквівалент вектора в C++), що має динамічний розмір. Його можна зменшити або розширити залежно від розміру. ArrayList є частиною фреймворку колекції та присутній у пакет java.util .
Синтаксис:
ArrayListlist = new ArrayList <> (); Тут важливо те, що E тут представляє тип даних об’єкта, уявіть собі Ціле число тут. Клас Integer обертає значення примітивного типу внутр в об'єкті. Об’єкт типу Integer містить одне поле типу int. Перегляньте концепцію класи-обгортки у java, перш ніж рухатися вперед, оскільки він буде служити тут, на серверній частині, щоб розуміння було зрозумілішим, якщо ми добре знаємо поняття автопакування та розпакування . Це тому, що під час виконання операцій над елементами в списку їхній синтаксис буде відрізнятися, тому розуміння концепції буде вичерпано, як, припустімо, розглянемо сценарій додавання елементів до спеціального ArrayList і зверніть увагу на відмінності в синтаксисі між двома з них.
Синтаксис:
ArrayListal = new Arraylist () ;
al.add(1) ;Синтаксис:
ArrayList alobj = new Arraylist() ;
alobj(new Integer(1)) ;Давайте візьмемо приклад ілюстрації для сприйняття, як наведено нижче:
Ілюстрація:
![]()
тут ми маємо всі елементи одного типу, які ми зазвичай часто використовуємо. Тепер давайте запропонуємо той самий схематичний потік. ArrayList просто підтримує кілька даних, як показано на цьому зображенні.
![]()
У наведеному вище списку ArrayList ми можемо чітко бачити, що елементи, які зберігаються, мають різні типи. Отже, це виривається концепція обмеження. до одного типу, і не тільки до цього списку, дає нам можливість створювати список відповідно до нашого типу, де ми маємо доступ до того, які типи даних можуть бути в нашому ArrayList. Цей список у java називається Custom ArrayList . Спеціальний ArrayList має атрибути на основі вимог користувача та може містити більше одного типу даних. Ці дані надаються спеціальним внутрішнім класом, утвореним комбінацією різних типів даних примітивних об’єктів.Реалізація: Розглянемо випадок, коли нам потрібно прийняти вхідні дані як Н кількість студентів та деталі:
- номер рулону
- назва
- позначки
- номер телефону
Припустімо, що якщо ми не знаємо про концепцію спеціального ArrayList у java, тоді ми створимо наведені нижче окремі ArrayLists. Оскільки ми визначаємо 4 ArrayLists і відповідно зберігаємо дані в кожному з них.
ArrayListroll = new ArrayList <>(); // roll number ArrayListname = new ArrayList <>(); // name ArrayListmarks = new ArrayList <>(); // marks ArrayListphone = new ArrayList <>(); // phone number Тепер ми будемо повторювати кожен із них, щоб отримати дані студентів, збільшивши часову складність нашої програми до більшої міри, як показано нижче.
for (int i = 0; i < n; i++)
{
// Adding all the values to each arraylist
// each arraylist has primitive datatypes
roll.add(rollnum_i);
name.add(name_i);
marks.add(marks_i);
phone.add(phone_i);
}Тепер давайте зробимо те саме за допомогою концепції, вивченої вище, реалізувавши те саме. Отже, щоб створити наш власний ArrayList, виконайте наведені нижче кроки:
Процедура: Побудова спеціального списку ArrayList полягає в наступному:
- Створіть об’єкт ArrayList і розмістіть його тип як дані класу.
- Визначте клас і помістіть необхідні сутності в конструктор.
- Зв’яжіть ці сутності з глобальними змінними.
- Дані, отримані з ArrayList, належать до типу класу, який зберігає кілька даних.
приклад
Java// Java program to illustrate Custom ArrayList // Importing ArrayList class from java.util package import java.util.ArrayList ; // Class 1 // Outer class // Main class // CustomArrayList class Data { // Global variables of the class int roll ; String name ; int marks ; long phone ; // Constructor has type of data that is required Data ( int roll String name int marks long phone ) { // Initialize the input variable from main // function to the global variable of the class // this keyword refers to current instance this . roll = roll ; this . name = name ; this . marks = marks ; this . phone = phone ; } } public class GFG { // Custom class which has data type class has // defined the type of data ArrayList // size of input 4 int n = 4 ; // Class 2 // Inner class // The custom datatype class public void addValues ( int roll [] String name [] int marks [] long phone [] ) { // local custom arraylist of data type // Data having (int String int long) type // from the class ArrayList < Data > list = new ArrayList <> (); for ( int i = 0 ; i < n ; i ++ ) { // create an object and send values to the // constructor to be saved in the Data class list . add ( new Data ( roll [ i ] name [ i ] marks [ i ] phone [ i ] )); } // after adding values printing the values to // test the custom arraylist printValues ( list ); } // Method 2 // To print the values public void printValues ( ArrayList < Data > list ) { // list- the custom arraylist is sent from // previous function for ( int i = 0 ; i < n ; i ++ ) { // Data received from arraylist is of Data // type which is custom (int String int // long) based on class Data Data data = list . get ( i ); // Print and display custom ArrayList // elements that holds for student attribute // Data variable of type Data has four // primitive datatypes roll -int name- // String marks- int phone- long System . out . println ( data . roll + ' ' + data . name + ' ' + data . marks + ' ' + data . phone ); } } // Method 1 // Main driver method public static void main ( String args [] ) { // Custom input data int roll [] = { 1 2 3 4 }; String name [] = { 'Shubham' 'Atul' 'Ayush' 'Rupesh' }; int marks [] = { 100 99 93 94 }; long phone [] = { 8762357381L 8762357382L 8762357383L 8762357384L }; // Creating an object of the class GFG custom = new GFG (); // Now calling function to add the values to the // arraylist custom . addValues ( roll name marks phone ); } }
Вихід1 Shubham 100 8762357381 2 Atul 99 8762357382 3 Ayush 93 8762357383 4 Rupesh 94 8762357384Спеціальний ArrayList у Java можна створити шляхом розширення класу java.util.AbstractList і реалізації його методів. Ось приклад того, як можна створити настроюваний ArrayList:
Javaimport java.util.AbstractList ; import java.util.Arrays ; import java.util.List ; public class CustomArrayList < E > extends AbstractList < E > { private int size = 0 ; private static final int DEFAULT_CAPACITY = 10 ; private Object elements [] ; public CustomArrayList () { elements = new Object [ DEFAULT_CAPACITY ] ; } public CustomArrayList ( int capacity ) { elements = new Object [ capacity ] ; } @Override public int size () { return size ; } @Override public E get ( int index ) { if ( index >= size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } return ( E ) elements [ index ] ; } @Override public void add ( int index E element ) { if ( index > size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } ensureCapacity (); for ( int i = size - 1 ; i >= index ; i -- ) { elements [ i + 1 ] = elements [ i ] ; } elements [ index ] = element ; size ++ ; } @Override public E remove ( int index ) { if ( index >= size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } Object item = elements [ index ] ; for ( int i = index ; i < size - 1 ; i ++ ) { elements [ i ] = elements [ i + 1 ] ; } size -- ; return ( E ) item ; } private void ensureCapacity () { int newSize = elements . length * 2 ; elements = Arrays . copyOf ( elements newSize ); } public static void main ( String [] args ) { List < Integer > list = new CustomArrayList <> (); list . add ( 1 ); list . add ( 2 ); list . add ( 3 ); System . out . println ( 'CustomArrayList: ' + list ); } }
ВихідCustomArrayList: [1 2 3]У цьому прикладі спеціальний ArrayList створюється шляхом розширення класу AbstractList і реалізації його методів size get add і remove. Спеціальний ArrayList також має приватний метод, який називається secureCapacity, який подвоює розмір ArrayList, якщо в ньому не вистачає місця.
Переваги використання спеціального ArrayList у Java:
- Гнучкість: створення спеціального ArrayList дозволяє налаштувати поведінку ArrayList відповідно до конкретних потреб вашої програми.
- Розуміння: створення власного ArrayList з нуля може допомогти вам зрозуміти, як працюють ArrayList і як їх ефективно використовувати.
Недоліки використання спеціального ArrayList у Java:
- Витрата часу. Створення власного ArrayList може зайняти багато часу та потребує хорошого
Створіть вікторину