Преди да продължим, нека бързо преразгледаме концепцията на масиви и 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 и отбележете разликите в синтаксиса между два от тях.
Синтаксис:
ArrayListal = new Arraylist () ;
al.add(1) ;
Синтаксис:
ArrayList alobj = new Arraylist() ;
alobj(new Integer(1)) ;
Нека вземем примерна илюстрация, която да възприемем, както е посочено по-долу, както следва:
Илюстрация:

тук имаме всички елементи от същия тип, които обикновено често използваме. Сега нека предложим същия диаграмен поток. ArrayList просто поддържа множество данни по начина, показан на това изображение.

В горния 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 е както следва:
- Създайте обект ArrayList и поставете неговия тип като данни за клас.
- Дефинирайте клас и поставете необходимите обекти в конструктора.
- Свържете тези обекти с глобални променливи.
- Данните, получени от ArrayList, са от този тип клас, който съхранява множество данни.
Пример
програма за наследяване в pythonJava
// 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 може да отнеме много време и изисква добро
Създаване на тест