Brugerdefineret ArrayList i Java

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:

 Arraylist  al = 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:

 ArrayList   list = 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:

 ArrayList        al     = 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:

Brugerdefineret ArrayList i Java

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. 

Brugerdefineret ArrayList i Java


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.

 ArrayList   roll = new ArrayList <>(); // roll number  
  ArrayList  name = new ArrayList <>(); // name  
 ArrayList   marks = new ArrayList <>(); // marks  
 ArrayList  phone = 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:

  1. Byg et ArrayList-objekt og placer dets type som en klassedata.
  2. Definer en klasse og indsæt de nødvendige entiteter i konstruktøren.
  3. Link disse enheder til globale variabler.
  4. 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  );      }   }   

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

En 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:

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

Produktion
CustomArrayList: [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:

  1. 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.
  2. 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:

  1. Tidsforbrug: At lave en tilpasset ArrayList kan være tidskrævende og kræver et godt

Opret quiz