ArrayList מותאם אישית ב-Java

ArrayList מותאם אישית ב-Java

לפני שנמשיך הלאה, הבה נשנה במהירות את הרעיון של מערכים ו ArrayList בִּמְהִירוּת. אז ב-java ראינו מערכים הם מבני נתונים ליניאריים המספקים פונקציונליות להוספת אלמנטים באופן רציף במרחב כתובות הזיכרון, בעוד ArrayList היא מחלקה השייכת למסגרת Collection. בהיותו מתכנת טוב כבר מודעים לשימוש ב- ArrayList על פני מערכים למרות הכרת ההבדלים בין שני אלה. עכשיו מתקדמים אפילו עם ArrayList מגיעה פונקציונליות להעביר את סוג הנתונים של אלמנטים שאמורים להיות מאוחסנים ב- ArrayList בין אם זה מחרוזת אובייקט שלם double float וכו'. 

תַחבִּיר:

 Arraylist  al = new ArrayList  ;  

פֶּתֶק: ArrayList ב-Java (שווה ערך לוקטור ב-C++) בעל גודל דינמי. ניתן לכווץ או להרחיב אותו לפי גודל. ArrayList הוא חלק ממסגרת האוסף והוא קיים ב חבילת java.util

תַחבִּיר:

 ArrayList   list = new ArrayList  <> ();  

הדבר החשוב כאן בחוץ הוא ש-E כאן מייצג סוג נתונים של אובייקט תאר לעצמך מִספָּר שָׁלֵם כָּאן. המחלקה Integer עוטפת ערך מהסוג הפרימיטיבי int בחפץ. אובייקט מסוג שלם מכיל שדה בודד שהסוג שלו הוא int. האם לעבור על הרעיון של שיעורי עטיפה ב-java לפני שתתקדם, שכן הוא ישמש כאן בקצה האחורי, מה שהופך את ההבנה לבהירה יותר אם אנחנו מודעים לכך היטב מושגי אגרוף אוטומטי ו- unboxing . הסיבה לכך היא שבזמן ביצוע פעולות על אלמנטים ברשימה התחביר שלהם יהיה שונה, כך שאפיסת המושג תתרוקן, שכן נניח שקול תרחיש של הוספת אלמנטים ל-ArrayList מותאם אישית ושימו לב להבדלים בתחביר בין שניים מהם. 

תַחבִּיר:

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

תַחבִּיר:

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

הבה ניקח איור לדוגמה כדי לתפוס את המפורט להלן כדלקמן:

אִיוּר:

ArrayList מותאם אישית ב-Java

כאן יש לנו את כל האלמנטים מאותו סוג שבאופן כללי אנו משתמשים בהם לעתים קרובות. כעת הבה נציע את אותה זרימה דיאגרמטית ArrayList פשוט תומך במספר נתונים באופן שמוצג בתמונה זו. 

ArrayList מותאם אישית ב-Java


ב-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 מותאמת אישית היא כדלקמן:

  1. בנה אובייקט ArrayList והצב את הסוג שלו כנתוני מחלקה.
  2. הגדירו מחלקה ושימו את הישויות הנדרשות בבנאי.
  3. קשר את הישויות הללו למשתנים גלובליים.
  4. הנתונים המתקבלים מה-ArrayList הם מסוג המחלקה המאחסנת נתונים מרובים.

דוּגמָה

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

תְפוּקָה
1 Shubham 100 8762357381 2 Atul 99 8762357382 3 Ayush 93 8762357383 4 Rupesh 94 8762357384 

ניתן ליצור ArrayList מותאם אישית ב-Java על ידי הרחבת המחלקה java.util.AbstractList ויישום השיטות שלה. הנה דוגמה לאופן שבו אתה יכול ליצור 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  );      }   }   

תְפוּקָה
CustomArrayList: [1 2 3] 

בדוגמה זו ה-ArrayList המותאם אישית נוצר על ידי הרחבת המחלקה AbstractList ויישום השיטות שלה size get add and remove. ל-ArrayList המותאם אישית יש גם שיטה פרטית בשם sureCapacity שמכפילה את גודל ה-ArrayList אם נגמר לו המקום.

יתרונות השימוש ב-ArrayList מותאם אישית ב-Java:

  1. גמישות: יצירת ArrayList מותאמת אישית מאפשרת לך להתאים אישית את ההתנהגות של ArrayList כדי לענות על הצרכים הספציפיים של היישום שלך.
  2. הבנה: יצירת ArrayList משלך מאפס יכולה לעזור לך להבין כיצד ArrayLists פועלות וכיצד להשתמש בהן ביעילות.

החסרונות של שימוש ב-ArrayList מותאם אישית ב-Java:

  1. צריכת זמן: יצירת ArrayList מותאמת אישית יכולה להיות גוזלת זמן ודורשת טוב

צור חידון