לפני שנמשיך הלאה, הבה נשנה במהירות את הרעיון של מערכים ו 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 מותאם אישית ושימו לב להבדלים בתחביר בין שניים מהם.
תַחבִּיר:
ArrayListal = new Arraylist () ;
al.add(1) ;
תַחבִּיר:
ArrayList alobj = new Arraylist() ;
alobj(new Integer(1)) ;
הבה ניקח איור לדוגמה כדי לתפוס את המפורט להלן כדלקמן:
אִיוּר:

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

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 מותאמת אישית היא כדלקמן:
- בנה אובייקט ArrayList והצב את הסוג שלו כנתוני מחלקה.
- הגדירו מחלקה ושימו את הישויות הנדרשות בבנאי.
- קשר את הישויות הללו למשתנים גלובליים.
- הנתונים המתקבלים מה-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 מותאם אישית:
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); } }
תְפוּקָה
CustomArrayList: [1 2 3]
בדוגמה זו ה-ArrayList המותאם אישית נוצר על ידי הרחבת המחלקה AbstractList ויישום השיטות שלה size get add and remove. ל-ArrayList המותאם אישית יש גם שיטה פרטית בשם sureCapacity שמכפילה את גודל ה-ArrayList אם נגמר לו המקום.
יתרונות השימוש ב-ArrayList מותאם אישית ב-Java:
- גמישות: יצירת ArrayList מותאמת אישית מאפשרת לך להתאים אישית את ההתנהגות של ArrayList כדי לענות על הצרכים הספציפיים של היישום שלך.
- הבנה: יצירת ArrayList משלך מאפס יכולה לעזור לך להבין כיצד ArrayLists פועלות וכיצד להשתמש בהן ביעילות.
החסרונות של שימוש ב-ArrayList מותאם אישית ב-Java:
- צריכת זמן: יצירת ArrayList מותאמת אישית יכולה להיות גוזלת זמן ודורשת טוב
צור חידון