Персонализиран ArrayList в Java

Персонализиран ArrayList в Java

Преди да продължим, нека бързо преразгледаме концепцията на масиви и ArrayList бързо. Така че в java видяхме, че масивите са линейни структури от данни, осигуряващи функционалност за добавяне на елементи по непрекъснат начин в адресното пространство на паметта, докато ArrayList е клас, принадлежащ към рамката на колекцията. Като добър програмист човек вече е наясно с използването на ArrayList над масиви, въпреки че знае разликите между тези два. Сега, ако продължим напред, дори с ArrayList идва функционалност за предаване на типа на типа данни на елементите, които трябва да се съхраняват в ArrayList, било то обектен низ, цяло число, двоен плаващ елемент и т.н. 

Синтаксис:

 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. Този списък се нарича Custom ArrayList в java . Персонализираният 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 може да отнеме много време и изисква добро

Създаване на тест