ההבדל בין ArrayList ל- LinkedList בג'אווה

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 3 אַפּרִיל 2021
תאריך עדכון: 6 מאי 2024
Anonim
ההבדל בין ArrayList ל- LinkedList בג'אווה - טכנולוגיה
ההבדל בין ArrayList ל- LinkedList בג'אווה - טכנולוגיה

תוֹכֶן


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

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

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהרשימת מערךרשימה מקושרת
בסיסי ArrayList מאפשר גישה אקראית לרכיבים ברשימה.LinkedList אינה מאפשרת גישה אקראית לרכיבים ברשימה.
מבנה נתוניםהמבנה הפנימי המשמש לאחסון אלמנטים הוא המערך הדינמי.המבנה הפנימי המשמש לאחסון אלמנטים הוא רשימת קישורים כפולה.
מאריךArrayList מרחיב את שיעור AbstarctList.LinkedList מרחיב את AbstractSequentialList.
מיישמתAbstractList מיישם ממשק רשימה.LinkedList מיישם רשימת, Deque, תור.
גישה הגישה לאלמנטים ברשימה מהירה יותר ב- ArrayList.הגישה לאלמנטים ברשימה איטית יותר ב- LinkedList.
מניפולציהמניפולציה לרכיבים ברשימה איטית יותר ב- ArrayList.מניפולציה לרכיבים ברשימה מהירה יותר ב- LinkedList.
התנהגותArraylList מתנהג כרשימה כפי שהיא מיישמת רשימה.LinkedList מתנהגת כמו רשימה כמו גם בתור מכיוון שהיא מיישמת את רשימת וגם תור בשניהם.


הגדרת ArrayList

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

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

ArrayList () ArrayList (אוסף <? מרחיב E> c) ArrayList (קיבולת int)

ה ראשון הקבלן מיישם רשימת מערכים ריקה. ה שנייה הקבלן מיישם רשימת מערכים שאתחללה באמצעות אוסף ג אלמנטים. ה שלישית קונסטרוקטור מיישם רשימת מערכים באמצעות קיבולת הניתן בטיעון. עבודה עם ArrayList, לפעמים תידרש להמיר את Collection ArrayList למערך. ניתן לעשות זאת באמצעות שיחה toArray ().


הגדרת קישור ליסט

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

ישנם שני בנאים בכיתת LinkedList.

LinkedList () LinkedList (אוסף <? מרחיב E> c)

ה ראשון בנאי יוצר רשימה מקושרת ריקה. ה שנייה הקונסטרוקטור יוצר רשימה מקושרת, מאתחל עם האלמנטים של אוסף ג.

ב- LinkedList המניפולציה של הרשימה קלה ומהירה. הסיבה לכך היא שאם אתה מוסיף או מוחק אלמנט כלשהו ברשימה, אין צורך לשנות את האלמנטים כמו ב- ArrayList. אולם הגישה איטית יותר מכיוון שאין לה אינדקס לגישה ישירה אלמנטים.

  1. ניתן לגשת לרשימה המיושמת על ידי ArrayList באופן אקראי מכיוון ש- ArrayList מאמצת את מבנה הנתונים המבוסס על אינדקס של המערך. מצד שני, לא ניתן לגשת לרשימה המיושמת על ידי LinkedList באופן אקראי מכיוון שעל מנת לאחזר או לגשת לאלמנט מסוים ברשימה אתה צריך לעבור את הרשימה.
  2. מבנה הנתונים הפנימי המשמש את ArrayList לאחסון רכיבי הרשימה הוא מערך דינמי שיכולים לצמוח או להתכווץ ככל שמוסיפים או נמחקים האלמנטים מהרשימה. עם זאת, מבנה הנתונים הפנימי המשמש את LinkedList לאחסון האלמנטים ברשימה הוא רשימה מקושרת כפליים.
  3. ArrayList מרחיב את AbstractList כיתה שהיא גם כיתת אוסף בעוד שכיתת LinkedList משתרעת AbstractSequentialList כיתה שהיא שוב כיתת אוסף.
  4. יישומי הכיתה של ArrayList רשימה ואילו ממשק ה- LinkedList מיישם רשימה, תור, ו דיק ממשקים.
  5. גישה אלמנטים מהרשימה המיושמת באמצעות ArrayList היא מהיר יותר מכיוון שיש לו מבנה נתונים מבוסס אינדקס. מצד שני, אין מבנה מבוסס אינדקס ברשימה המיושמת על ידי LinkledList. לפיכך, איטרטור מוחל על גבי הרשימה כדי להגיע לרכיב אליו ניגשים הגישה איטי יותר ב- LinkedList.
  6. מניפולציה היא מניפולציה ברשימה המיושמת באמצעות ArrayList מכיוון שבכל פעם שמוסיפים או נמחקים אלמנט מהרשימה, היסודות ברשימה מועברים כדי להתאים את השינוי. מצד שני, המניפולציה מהירה יותר ברשימה המיושמת על ידי LinkedList מכיוון שהיא אינה דורשת העברת אלמנטים ברשימה על ידי הוספה או מחיקה של האלמנטים מהרשימה.
  7. ArrayList מתנהג כמו רשימה שכן הוא מיישם ממשק רשימה ואילו LinkedList פועלת כ רשימה ו תור מכיוון שהוא מיישם את רשימת התורים ושניהם.

סיכום:

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