שאלת ביצועים ב- Java

שאלת ביצועים ב- Java

שלום לכם, מה יעיל יותר כדי לעבור על אלמנטים הנשמרים ב- TreeMap: לולאת for על האלמנטים וגישה לכל אלמנט בצורה (map.entry)iter.next().getvalue() (מוגדר מראש Iterator על ה- entrySet() של ה- TreeMap) או שימוש ב- TreeMap.values(), וע"י שימוש ב- Iterator על ה- Collection המתקבל, ביצוע הגישה לכל אלמנט? TreeMap.values().iterator().next().getvalue() ? תודה מראש!
 

neko

New member
למה שלא תשתמש בפונק'

הGETSYSTEMTIME (או שאולי זה היה GETCURRENTTIME בSYSTEM? לא זוכר...) ותחשב בעצמך מה יותר מהיר?
 
התשובה היא: אין תשובה...../images/Emo26.gif

הרי גם entrySet וגם values מחזירות לך אובייקט שאין לך דרך לדעת מהו. אתה רואה את האובייקט דרך interfaces (במקרה הזה Set ו-Collection בהתאמה) - ותאורטית אתה לא יכול לדעת מי האובייקט הקונקרטי שעומד מאחוריהם ואיך הוא ממומש. בגלל שאתה לא יודע איך הוא ממומש - אתה לא יכול להעריך מי יותר יעיל. מעשית - אתה יכול לבדוק בקוד באיזה אובייקט קונקרטי משתמשים, להסתכל על המימוש שלו ולהחליט איזה מימוש יותר יעיל...
 

voguemaster

New member
או

באמת למדוד את הזמן שלוקח לבצע את קטעי הקוד השונים, עדיף כמה פעמים (ואז ביצוע ממוצע). נורא קל, new java.util.Date בהתחלה, new java.util.Date בסוף ואז עושים getTime ומחסרים
 
אבל אתה יודע מה הבעיה...../images/Emo26.gif

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

voguemaster

New member
אממ...

הוא עובד בג'אווה, לא ? ג'אווה מבטיחה סיבוכיות זמן מסוימת לביצוע פעולות על Collection. השאלה היא מה יותר יעיל מבחינת אופטימיזציה.. ההבדלים הם בטח לא גדולים אבל יכול להיות שאני טועה פה.
 
אתה בטוח??../images/Emo26.gif

אתה בטוח ש"ג'אווה מבטיחה סיבוכיות זמן מסוימת לביצוע פעולות על Collection"?? נשמע מוזר.... הרי Collection הוא רק interface... בפנים יכול לשבת אובייקט שהוא Vector או אובייקט שאתה כתבת שמממש עץ AVL למשל... ואז ברור שהסיבוכיות לא מובטחת מראש - אלא נקבעת לפי זהות האובייקט...
 

voguemaster

New member
על Collection מסוים כמובן

לא על Collection ג'נרי. כלומר אם אתה מבצע פעולות על Vector, מובטחת לך סיבוכיות זמן מסוימת בפעולות עליו. כנ"ל לגבי TreeMap. אבל, אם אתה ממיר ל-Collection ולא יודע מה הוא באמת, כמובן שאין בטחונות. אם אתה כן יודע זה משהו אחר.
 
אז חוזרים להתחלה...../images/Emo26.gif

זה בדיוק העניין - שתי המתודות שהכותב בהודעה המקורית דיבר עליהן - מחזירות Collection ו-Set שהן interfaces... אף-אחד לא מתחייב לאיזה אובייקט קונקרטי תקבל - ולכן ג'אווה לא מתחיבת מראש לאיזה סיבוכיות תקבל...
 
למעלה