Настроюваний ArrayList у Java

Настроюваний ArrayList у Java

Перш ніж продовжити далі, давайте швидко переглянемо концепцію масиви і ArrayList швидко. Тож у Java ми бачили, що масиви — це лінійні структури даних, що забезпечують функціональність для безперервного додавання елементів у адресний простір пам’яті, тоді як ArrayList — це клас, що належить до структури Collection. Будучи хорошим програмістом, людина вже знає про використання ArrayList над масивами, незважаючи на те, що знає різницю між цими двома. Тепер, якщо рухатися вперед, навіть із ArrayList з’являється функція передачі типу даних елементів, які мають зберігатися в ArrayList, будь то рядок об’єкта integer double float тощо. 

Синтаксис:

 Arraylist  al = new ArrayList  ;  

Примітка: ArrayList в Java (еквівалент вектора в C++), що має динамічний розмір. Його можна зменшити або розширити залежно від розміру. ArrayList є частиною фреймворку колекції та присутній у пакет java.util

Синтаксис:

 ArrayList   list = new ArrayList  <> ();  

Тут важливо те, що E тут представляє тип даних об’єкта, уявіть собі Ціле число тут. Клас Integer обертає значення примітивного типу внутр в об'єкті. Об’єкт типу Integer містить одне поле типу int. Перегляньте концепцію класи-обгортки у java, перш ніж рухатися вперед, оскільки він буде служити тут, на серверній частині, щоб розуміння було зрозумілішим, якщо ми добре знаємо поняття автопакування та розпакування . Це тому, що під час виконання операцій над елементами в списку їхній синтаксис буде відрізнятися, тому розуміння концепції буде вичерпано, як, припустімо, розглянемо сценарій додавання елементів до спеціального ArrayList і зверніть увагу на відмінності в синтаксисі між двома з них. 

Синтаксис:

 ArrayList        al     = new Arraylist  () ;   
al.add(1) ;

Синтаксис:

 ArrayList      alobj     = new Arraylist() ;   
alobj(new Integer(1)) ;

Давайте візьмемо приклад ілюстрації для сприйняття, як наведено нижче:

Ілюстрація:

Настроюваний ArrayList у Java

тут ми маємо всі елементи одного типу, які ми зазвичай часто використовуємо. Тепер давайте запропонуємо той самий схематичний потік. ArrayList просто підтримує кілька даних, як показано на цьому зображенні. 

Настроюваний ArrayList у Java


У наведеному вище списку ArrayList ми можемо чітко бачити, що елементи, які зберігаються, мають різні типи. Отже, це виривається концепція обмеження. до одного типу, і не тільки до цього списку, дає нам можливість створювати список відповідно до нашого типу, де ми маємо доступ до того, які типи даних можуть бути в нашому ArrayList. Цей список у java називається Custom ArrayList . Спеціальний ArrayList має атрибути на основі вимог користувача та може містити більше одного типу даних. Ці дані надаються спеціальним внутрішнім класом, утвореним комбінацією різних типів даних примітивних об’єктів.

Реалізація: Розглянемо випадок, коли нам потрібно прийняти вхідні дані як Н кількість студентів та деталі: 

  • номер рулону
  • назва
  • позначки
  • номер телефону

Припустімо, що якщо ми не знаємо про концепцію спеціального ArrayList у java, тоді ми створимо наведені нижче окремі ArrayLists. Оскільки ми визначаємо 4 ArrayLists і відповідно зберігаємо дані в кожному з них.

 ArrayList   roll = new ArrayList <>(); // roll number  
  ArrayList  name = new ArrayList <>(); // name  
 ArrayList   marks = new ArrayList <>(); // marks  
 ArrayList  phone = 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 полягає в наступному:

  1. Створіть об’єкт ArrayList і розмістіть його тип як дані класу.
  2. Визначте клас і помістіть необхідні сутності в конструктор.
  3. Зв’яжіть ці сутності з глобальними змінними.
  4. Дані, отримані з 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:

Java
   import     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:

  1. Гнучкість: створення спеціального ArrayList дозволяє налаштувати поведінку ArrayList відповідно до конкретних потреб вашої програми.
  2. Розуміння: створення власного ArrayList з нуля може допомогти вам зрозуміти, як працюють ArrayList і як їх ефективно використовувати.

Недоліки використання спеціального ArrayList у Java:

  1. Витрата часу. Створення власного ArrayList може зайняти багато часу та потребує хорошого

Створіть вікторину