» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
מחלקת וקטור + מחלקת Hashtable
דף ראשי  מתקדמים  וקטורים, Hashtables ורשימות  מחלקת וקטור + מחלקת Hashtable גרסה להדפסה

מחלקת וקטור

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

זוהי מחלקה שימושית מאד אשר מספקת את הנוחות שבגישת לפי אינדקס ובו זמנית לא מגבילה אותך לשימוש במערך שגודלו נקבע בזמן ההידור.

שני מושגים חשובים בעת דיון במחלקת וקטור הם קיבולת ותוספת קיבולת (capacityIncremet.)

הקיבולת מגדירה כמה אובייקטים ניתנים לאחסון באובייקט וקטור בגודלו הנוכחי, וגודלה תהיה לפחות בגודל מספר האובייקטים המאוחסנים באובייקט וקטור (elementCount- ספירת אלמנטים). כאשר יש צורך בהגדלת הקיבולת, היא גדלה בגושים בגודל של capacityIncrement.

ישנם שלושה בנאים מועמסים אשר מאפשרים לך לשלוט בדרך בה האובייקט נבנה במונחים של קיבולת ותוספת קיבולת התחלתיים.

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

 

·   (אובייקט) AddElement - מוסיף אובייקט ספציפי לסוף הוקטור, הגדלתו באחד.

·   (אובייקט) RemoveElement- מסיר את ההתרחשות הראשונה של הארגומנט מוקטור זה.

·   (RemoveElement (int - מוחק אובייקט באינדקס הספציפי.

·    Capacity()- מחזיר את הקיבולת הנוכחית של וקטור זה.

·   (אובייקט) - Containsבודק אם האובייקט הספציפי הוא רכיב של וקטור זה.

·   ) ElementAt (int - מחזיר את האובייקט באינדקס הספציפי.

·   Elements() - מחזיר רישום של האובייקטים בוקטור.

·    FirstElement() - מחזיר את האובייקט הראשון מוקטור זה.

·   (int,אובייקט) InsertElementAt - מחדיר את האובייקט הספציפי כרכיב בוקטור באינדקס
    ספציפי.

·    IsEmpty()- בודק אם לוקטור אין רכיבים.

·    LastElement()- מחזיר את הרכיב האחרון של הוקטור.

שים לב במיוחד לפונקציה בשם elements(). זוהי הפונקציה אשר מחזירה אובייקט רישום עבור אובייקט במחלקת וקטור. נשתמש בפונקצית elements() בתוכנית דוגמא מאוחר יותר בשיעור.


 

מחלקת Hashtable

 

אובייקטים ממחלקת Hashtable הם מעט יותר מסובכים מאשר אובייקטים ממחלקת וקטור. למזלנו, החבר'ה ב - JavaSoft כבר ביצעו עבורנו את מרבית העבודה הקשה, וכל שעלינו לעשות הוא לנצל את מה שסיפקו עבורנו.

Hashtable  מאחסן פוינטרים לאובייקטים על ידי מיפוי מפתחות לערכים. ניתן להשתמש בכל אובייקט שאינו מאופס כמפתח או כערך. אובייקטים בהם משתמשים כמפתחות צריכים ליישם את פונקצית hashCode(). זוהי פונקציה אשר ממירה אובייקט (בתקווה) למזהה ייחודי בדרך של יישום אלגוריתם מתמטי לאובייקט. HashCode() היא פונקציה במחלקת אובייקט וגרסת ברירת מחדל ירושה בכל המחלקות ב- Java.

הרבה מהמחלקות ב- API Java סטנדרטי משתמשות בפונקצית hashCode() עבור אובייקטים ממחלקה זו. הדבר כולל את מחלקת מחרוזת בה נשתמש עבור ערכי מפתח בתוכנית דוגמא.

בדומה, אובייקטים בהם משתמשים כמפתחות ב-hashtables חייבים ליישם פונקצית equals(). פונקצית equals()  מוגדרת במחלקת אובייקט ונמצאת בשימוש על ידי מחלקות רבות
(כולל מחרוזת) ב-
API Java סטנדרטי.

שני מונחים בעלי עניין בזמן שימוש ב- hashtables הם קיבולת ופקטור טעינה (load factor), מכיוון שמונחים אלה משפיעים על יעילות האובייקט בנוגע לאחסון והחזרה של אובייקטים.
תוכל למצוא דיון מפורט יותר של מונחים אלה בתיעוד
JDK.

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

כל האובייקטים מסוג ערך מסווגים כאובייקט כללי.

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

כמו עם וקטור, ישנן מספר שיטות זמינות לעזור לך להשתמש ב- hashtables. דוגמא מפונקציות אלה ניתנת להלן. (כדאי לך לסקור את יתר הפונקציות בתיעוד JDK.)

 

·   (אובייקט) Contains - בודק אם מיפוי מפתח לערך ספציפי הוא ב hashtable.

·   (אובייקט) ContainsKey - בודק אם אובייקט ספציפי הוא מפתח ב- hashtable.

·    Elements()- מחזיר רישום של הערכים ב- hashtable הזה.

· Keys()   - מחזיר רישום של המפתחות ב- hashtable.

·   (אובייקט) Get - מחזיר ערך שאליו ממופה מפתח מסוים ב-hashtable זה.

·   IsEmpty()- בודק אם ל-Hashtable אין מפתחות הממופים לערכים.

·  (אובייקט)Put - ממפה מפתח ספציפי לערך ספציפי ב- hashtable זה.

 

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

 02-12-03 / 19:33  עודכן ,  13-10-03 / 19:08  נוצר ע"י רונית רייכמן  בתאריך 
 רישום תוכנית עבור תוכנית רישום - הקודםהבא - תוכנית דוגמא 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 4