logo

Персонализиран 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, са от този тип клас, който съхранява множество данни.

Пример

програма за наследяване в python
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 може да отнеме много време и изисква добро

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