Anpassad ArrayList i Java

Anpassad ArrayList i Java

Innan vi går vidare låt oss snabbt revidera konceptet matriser och ArrayList snabbt. Så i java har vi sett att arrayer är linjära datastrukturer som ger funktionalitet för att lägga till element på ett kontinuerligt sätt i minnesadressutrymme medan ArrayList är en klass som tillhör samlingsramverket. Som en bra programmerare är man redan medveten om att använda ArrayList över arrayer trots att man känner till skillnaderna mellan dessa två. Nu går man framåt även med ArrayList kommer det en funktionalitet för att skicka den typ av datatyp av element som är tänkt att lagras i ArrayList, oavsett om det är en objektsträng heltal dubbelt float etc. 

Syntax:

 Arraylist  al = new ArrayList  ;  

Notera: ArrayList i Java (motsvarande vektor i C++) med dynamisk storlek. Den kan krympas eller utökas beroende på storlek. ArrayList är en del av samlingsramverket och finns i java.util-paketet

Syntax:

 ArrayList   list = new ArrayList  <> ();  

Det viktiga här ute är att E här representerar en objektdatatyp tänk dig Heltal här. Klassen Integer omsluter ett värde av den primitiva typen int i ett föremål. Ett objekt av typen Integer innehåller ett enda fält vars typ är int. Gå igenom begreppet omslagsklasser i java innan du går framåt eftersom det kommer att fungera här i backend, vilket gör förståelsen tydligare om vi är väl medvetna om autoboxning och unboxing koncept . Det beror på att när man utför operationer över element i listan kommer deras syntax att skilja sig så att greppet om konceptet kommer att uttömmas eftersom anta att överväga ett scenario med att lägga till element till anpassad ArrayList och notera skillnaderna i syntax mellan två av dem. 

Syntax:

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

Syntax:

 ArrayList      alobj     = new Arraylist() ;   
alobj(new Integer(1)) ;

Låt oss ta en exempelillustration för att uppfatta som anges nedan enligt följande:

Illustration:

Anpassad ArrayList i Java

här har vi alla element av samma typ som vi i allmänhet ofta använder. Låt oss nu föreslå samma schematiska flöde. ArrayList stöder helt enkelt flera data på det sätt som visas i den här bilden. 

Anpassad ArrayList i Java


I ovanstående ArrayList kan vi tydligt se att elementen som lagrats i är av olika typer. Så det bryter ut begreppet begränsande. till en enda typ och inte bara den här listan går ger oss flexibiliteten att göra List enligt vår typ där vi har tillgång till vilken typ av datatyper som kan finnas i vår ArrayList. Denna lista kallas Custom ArrayList i java . En anpassad ArrayList har attribut baserade på användarkrav och kan ha mer än en typ av data. Dessa data tillhandahålls av en anpassad inre klass som bildas av kombinationen av olika primitiva objektdatatyper.

Genomförande: Överväg ett fall när vi måste ta input som N antal elever och detaljer är: 

  • rullnummer
  • namn
  • märken
  • telefonnummer

Anta att om vi inte är medvetna om konceptet med anpassad Arraylist i java så skulle vi göra nedan listade individuella ArrayLists. Som vi definierar 4 ArrayLists och sparar data i enlighet med dem i var och en av dem.

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

Nu skulle vi iterera över var och en av dem för att hämta studentdata och öka tidskomplexiteten för vårt program i större utsträckning som illustreras nedan enligt följande.

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

Låt oss nu göra detsamma med hjälp av konceptet som vi lärt oss ovan genom att implementera detsamma. Så för att konstruera vår anpassade ArrayList utför stegen nedan enligt följande:

Förfarande: Att konstruera anpassad ArrayList är som följer:

  1. Bygg ett ArrayList-objekt och placera dess typ som en klassdata.
  2. Definiera en klass och lägg in de nödvändiga enheterna i konstruktorn.
  3. Länka dessa enheter till globala variabler.
  4. Data som tas emot från ArrayList är av den klasstypen som lagrar flera data.

Exempel

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 anpassad ArrayList i Java kan skapas genom att utöka klassen java.util.AbstractList och implementera dess metoder. Här är ett exempel på hur du kan skapa en anpassad 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 det här exemplet skapas den anpassade ArrayList genom att utöka klassen AbstractList och implementera dess metoder storlek get add and remove. Den anpassade ArrayList har också en privat metod som kallas sureCapacity som fördubblar storleken på ArrayList om det tar slut på utrymme.

Fördelar med att använda en anpassad ArrayList i Java:

  1. Flexibilitet: Genom att skapa en anpassad ArrayList kan du anpassa beteendet hos ArrayList för att möta de specifika behoven i din applikation.
  2. Förståelse: Att skapa din egen ArrayList från början kan hjälpa dig att förstå hur ArrayLists fungerar och hur du använder dem effektivt.

Nackdelar med att använda en anpassad ArrayList i Java:

  1. Tidsförbrukning: Att skapa en anpassad ArrayList kan vara tidskrävande och kräver en bra

Skapa frågesport