logo

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

isletter 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 מותאמת אישית יכולה להיות גוזלת זמן ודורשת טוב

צור חידון