logo

Prilagođeni ArrayList u Javi

Prije nego što nastavimo dalje, brzo revidiramo koncept nizovi i ArrayList brzo. Dakle, u Javi smo vidjeli nizove kao linearne podatkovne strukture koje pružaju funkcionalnost za dodavanje elemenata na kontinuirani način u memorijski adresni prostor, dok je ArrayList klasa koja pripada okviru zbirke. Budući da je dobar programer, već je svjestan korištenja ArrayList-a preko nizova unatoč poznavanju razlika između ova dva. Idemo dalje, čak i s ArrayList-om, dolazi funkcija za prosljeđivanje tipa podataka elemenata koji bi trebali biti pohranjeni u ArrayList-u, bilo da se radi o nizu objekata, cjelobrojnom dvostrukom floatu itd. 

Sintaksa:

Arraylist al = new ArrayList ;

Bilješka: ArrayList u Javi (ekvivalent vektoru u C++) ima dinamičku veličinu. Može se smanjiti ili proširiti ovisno o veličini. ArrayList je dio okvira zbirke i prisutan je u java.util paket



Sintaksa:

ArrayList  list = new ArrayList <> ();

Važna stvar ovdje je da E ovdje predstavlja tip podataka objekta, zamislite Cijeli broj ovdje. Klasa Integer omotava vrijednost primitivnog tipa int u objektu. Objekt tipa Integer sadrži jedno polje čiji je tip int. Prođite kroz koncept klase omotača u Javi prije nego krenemo naprijed jer će služiti ovdje u pozadini što će jasnije razumjeti ako smo dobro svjesni autoboxing i unboxing koncepti . To je zato što će se tijekom izvođenja operacija nad elementima na popisu njihova sintaksa razlikovati pa će se i razumijevanje koncepta iscrpiti, kao što pretpostavimo da razmotrimo scenarij dodavanja elemenata u prilagođeni ArrayList i uočimo razlike u sintaksi između njih dva. 

Sintaksa:

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

Sintaksa:

algoritam za bfs
ArrayList     alobj    = new Arraylist() ;  
alobj(new Integer(1)) ;

Uzmimo primjer ilustracije kako bismo je vidjeli kako je navedeno u nastavku:

Ilustracija:

Prilagođeni ArrayList u Javi

ovdje imamo sve elemente iste vrste koje općenito često koristimo. Predložimo sada isti dijagramski tok. ArrayList jednostavno podržava više podataka na način prikazan na ovoj slici. 

Prilagođeni ArrayList u Javi


U gornjoj ArrayList jasno možemo vidjeti da su elementi koji su pohranjeni različitih tipova. Dakle, izbija koncept ograničavajući. na jednu vrstu, a ne samo na ovaj popis, daje nam fleksibilnost da napravimo popis prema našem tipu gdje imamo pristup vrsti podataka koji se mogu nalaziti u našoj ArrayList. Ovaj popis se u Javi naziva Custom ArrayList . Prilagođeni ArrayList ima atribute koji se temelje na zahtjevima korisnika i može imati više od jedne vrste podataka. Ove podatke pruža prilagođena unutarnja klasa koja se formira kombinacijom različitih tipova podataka primitivnih objekata.

duljina niza java

Implementacija: Razmotrimo slučaj kada unos moramo uzeti kao N broj učenika i detalji su: 

  • rolni broj
  • ime
  • oznake
  • broj telefona

Pretpostavimo da ako nismo svjesni koncepta prilagođenog ArrayLista u Javi, tada bismo napravili dolje navedene pojedinačne ArrayListe. Kao što definiramo 4 ArrayLists i spremamo podatke u skladu s tim u svakom od njih.

ArrayList   roll = new ArrayList<>(); // roll number
 ArrayList name = new ArrayList<>(); // name
ArrayList   marks = new ArrayList<>(); // marks
ArrayList phone = new ArrayList<>(); // phone number 

Sada bismo ponavljali svaki od njih kako bismo dohvatili podatke učenika povećavajući vremensku složenost našeg programa u većoj mjeri kao što je ilustrirano u nastavku na sljedeći način.

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);
}

Učinimo sada isto uz pomoć gore naučenog koncepta implementirajući isti. Dakle, kako biste izradili naš prilagođeni ArrayList, izvedite dolje navedene korake kako slijedi:

Postupak: Konstruiranje prilagođene ArrayList je kako slijedi:

  1. Izgradite objekt ArrayList i postavite njegovu vrstu kao podatke klase.
  2. Definirajte klasu i stavite potrebne entitete u konstruktor.
  3. Povežite te entitete s globalnim varijablama.
  4. Podaci primljeni iz ArrayList-a su one vrste klase koja pohranjuje više podataka.

Primjer

čitati iz csv java
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);  } } 

Izlaz
1 Shubham 100 8762357381 2 Atul 99 8762357382 3 Ayush 93 8762357383 4 Rupesh 94 8762357384

Prilagođeni ArrayList u Javi može se stvoriti proširenjem klase java.util.AbstractList i implementacijom njezinih metoda. Evo primjera kako možete stvoriti prilagođeni 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);  } } 

Izlaz
CustomArrayList: [1 2 3]

U ovom primjeru prilagođeni ArrayList stvoren je proširenjem klase AbstractList i implementacijom njezinih metoda size get add i remove. Prilagođeni ArrayList također ima privatnu metodu pod nazivom secureCapacity koja udvostručuje veličinu ArrayList-a ako mu ponestane prostora.

Prednosti korištenja prilagođenog ArrayList-a u Javi:

  1. Fleksibilnost: Stvaranje prilagođenog ArrayList-a omogućuje vam prilagođavanje ponašanja ArrayList-a kako bi zadovoljio specifične potrebe vaše aplikacije.
  2. Razumijevanje: Stvaranje vlastitog ArrayList-a od nule može vam pomoći da shvatite kako ArrayLists funkcioniraju i kako ih učinkovito koristiti.

Nedostaci korištenja prilagođenog ArrayList-a u Javi:

  1. Potrošnja vremena: Stvaranje prilagođenog ArrayList-a može biti dugotrajan i zahtijeva dobar

Napravi kviz