Brugerdefineret ArrayList i Java
Før vi går videre, lad os hurtigt revidere konceptet arrays og ArrayList hurtigt. Så i java har vi set arrays er lineære datastrukturer, der giver funktionalitet til at tilføje elementer på en kontinuerlig måde i hukommelsesadresserummet, hvorimod ArrayList er en klasse, der hører til Collection frameworket. Som en god programmør er man allerede klar over at bruge ArrayList over arrays på trods af at man kender forskellene mellem disse to. Nu går man videre, selv med ArrayList, kommer der en funktionalitet til at videregive den type datatype af elementer, der formodes at blive lagret i ArrayList, uanset om det er en objektstreng heltal double float osv.
Syntaks:
Arraylistal = new ArrayList ; Note: ArrayList i Java (svarende til vektor i C++) med dynamisk størrelse. Den kan krympes eller udvides baseret på størrelse. ArrayList er en del af samlingsrammen og er til stede i java.util-pakken .
Syntaks:
ArrayListlist = new ArrayList <> (); Det vigtige her ude er, at E her repræsenterer en objektdatatype forestil dig det Heltal her. Heltalsklassen ombryder en værdi af den primitive type int i en genstand. Et objekt af typen Integer indeholder et enkelt felt, hvis type er int. Gå igennem begrebet indpakningsklasser i java, før du går videre, da det vil tjene her i backend, hvilket gør forståelsen klarere, hvis vi er godt klar over autoboxing og unboxing koncepter . Det er fordi, mens de udfører operationer over elementer i listen, vil deres syntaks være forskellig, så at gribe over konceptet vil udtømmes, da antag at overveje et scenario med at tilføje elementer til brugerdefineret ArrayList og bemærke forskellene i syntaks mellem to af dem.
Syntaks:
ArrayListal = new Arraylist () ;
al.add(1) ;Syntaks:
ArrayList alobj = new Arraylist() ;
alobj(new Integer(1)) ;Lad os tage en prøveillustration for at opfatte som angivet nedenfor som følger:
Illustration:
![]()
her har vi alle de elementer af samme type, som vi generelt ofte bruger. Lad os nu foreslå det samme diagrammatiske flow. ArrayList understøtter simpelthen flere data på den måde, der er vist i dette billede.
![]()
I ovenstående ArrayList kan vi tydeligt se, at de elementer, der er gemt i, er af forskellige typer. Så det bryder ud af begrebet begrænsende. til en enkelt type, og ikke kun denne liste går, giver os fleksibiliteten til at lave List i henhold til vores type, hvor vi har adgang til, hvilken slags datatyper der kan være der i vores ArrayList. Denne liste omtales som Custom ArrayList i java . En tilpasset ArrayList har attributter baseret på brugerkrav og kan have mere end én type data. Disse data leveres af en tilpasset indre klasse, som er dannet af kombinationen af forskellige primitive objektdatatyper.Implementering: Overvej en sag, når vi skal tage input som N antal elever og detaljer er:
- rullenummer
- navn
- mærker
- telefonnummer
Antag, at hvis vi ikke er klar over konceptet med brugerdefineret Arraylist i java, ville vi lave individuelle ArrayLists nedenfor. Som vi definerer 4 ArrayLists og gemmer data i overensstemmelse hermed i hver af dem.
ArrayListroll = new ArrayList <>(); // roll number ArrayListname = new ArrayList <>(); // name ArrayListmarks = new ArrayList <>(); // marks ArrayListphone = new ArrayList <>(); // phone number Nu ville vi iterere over hver af dem for at hente elevdata, hvilket øgede tidskompleksiteten af vores program i højere grad som illustreret nedenfor som følger.
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);
}Lad os nu gøre det samme ved hjælp af konceptet lært ovenfor ved at implementere det samme. Så for at konstruere vores brugerdefinerede ArrayList skal du udføre nedenstående trin som følger:
Procedure: Konstruktion af tilpasset ArrayList er som følger:
- Byg et ArrayList-objekt og placer dets type som en klassedata.
- Definer en klasse og indsæt de nødvendige entiteter i konstruktøren.
- Link disse enheder til globale variabler.
- Data modtaget fra ArrayList er af den klassetype, der gemmer flere data.
Eksempel
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 ); } }
Produktion1 Shubham 100 8762357381 2 Atul 99 8762357382 3 Ayush 93 8762357383 4 Rupesh 94 8762357384En brugerdefineret ArrayList i Java kan oprettes ved at udvide klassen java.util.AbstractList og implementere dens metoder. Her er et eksempel på, hvordan du kan oprette en brugerdefineret 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 ); } }
ProduktionCustomArrayList: [1 2 3]I dette eksempel oprettes den brugerdefinerede ArrayList ved at udvide AbstractList-klassen og implementere dens metoders størrelse get add and remove. Den brugerdefinerede ArrayList har også en privat metode kaldet sureCapacity, som fordobler størrelsen af ArrayList, hvis den løber tør for plads.
Fordele ved at bruge en brugerdefineret ArrayList i Java:
- Fleksibilitet: Oprettelse af en brugerdefineret ArrayList giver dig mulighed for at tilpasse adfærden af ArrayList til at opfylde de specifikke behov i din applikation.
- Forståelse: At oprette din egen ArrayList fra bunden kan hjælpe dig med at forstå, hvordan ArrayLists fungerer, og hvordan du bruger dem effektivt.
Ulemper ved at bruge en brugerdefineret ArrayList i Java:
- Tidsforbrug: At lave en tilpasset ArrayList kan være tidskrævende og kræver et godt
Opret quiz