הבדל בין שווים ל-hashCode ב-Java

תוכן עניינים:

הבדל בין שווים ל-hashCode ב-Java
הבדל בין שווים ל-hashCode ב-Java

וִידֵאוֹ: הבדל בין שווים ל-hashCode ב-Java

וִידֵאוֹ: הבדל בין שווים ל-hashCode ב-Java
וִידֵאוֹ: המחלקה Object 2024, נוֹבֶמבֶּר
Anonim

הבדל מפתח – שווה לעומת hashCode ב-Java

השווה דומה לאופרטור==, שמטרתו לבדוק זהות אובייקט ולא שוויון אובייקט. ה-hashCode הוא שיטה שבאמצעותה מחלקה מפרקת באופן מרומז או מפורש את הנתונים המאוחסנים במופע של המחלקה לערך hash יחיד, שהוא מספר שלם עם סימן 32 סיביות. ההבדל העיקרי בין equals ל-hashCode ב-Java הוא שה-equals משמש להשוואה בין שני אובייקטים בעוד שה-hashCode משמש ב-hash כדי להחליט לאיזו קבוצה יש לסווג אובייקט.

מה זה שווה ב-Java?

שיטה שווה משמשת להשוואה בין שני אובייקטים.שיטת ברירת המחדל שווה מוגדרת במחלקת האובייקט. יישום זה דומה לאופרטור==. שני הפניות לאובייקט שווים רק אם הם מצביעים על אותו אובייקט. אפשר לעקוף את שיטת השווה.

ההבדל בין שווה ל-hashCode ב-Java
ההבדל בין שווה ל-hashCode ב-Java

איור 01: תוכנית Java עם שווה

ההצהרה System.out.println(s1.equals(s2)) תיתן את התשובה שקר מכיוון ש-s1 ו-s2 מתייחסים לשני אובייקטים שונים. זה היה דומה להצהרה, System.out.println(s1==s2);

ההצהרה System.out.println(s1.equals(s3)) תיתן את התשובה true כי s1 ו-s3 מתייחסים לאותו אובייקט. זה היה דומה להצהרה, System.out.println(s1==s3);

אין שיטת שווה בכיתה Student. לכן, השווים במחלקה Object נקראים. True מוצג רק אם הפניה לאובייקט מכוונת לאותו אובייקט.

ההבדל בין שווה ל-hashCode ב-Java_Figure 02
ההבדל בין שווה ל-hashCode ב-Java_Figure 02

איור 02: תוכנית ג'אווה עם שווים

לפי התוכנית שלעיל, שיטת השווה מבוטלת. אובייקט מועבר לשיטה, והוא מועבר ל-Student. לאחר מכן, ערכי המזהה נבדקים. אם ערכי המזהה דומים, הוא יחזיר אמת. אם לא, זה יחזיר false. המזהים של s1 ו-s2 דומים. אז זה ידפיס נכון. המזהים של s1 ו-s3 דומים גם הם, כך שהם יודפסו נכון.

מהו hashCode ב-Java?

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

ל-hashCode נכון יכולים להיות מאפיינים כדלקמן.נניח שיש שני אובייקטים כמו obj1 ו-obj2. אם obj1.equals(obj2) נכון, אז obj1.hashCode() שווה ל-obj2.hashCode(). אם obj1.equals(obj2) הוא false, אין צורך ש-obj1.hashCode() אינו שווה ל-obj2.hashCode(). שני האובייקטים הלא שווים עשויים להיות בעלי אותו hashCode.

ההבדל בין שווה ל-hashCode ב-Java_Figure 03
ההבדל בין שווה ל-hashCode ב-Java_Figure 03

איור 03: כיתת תלמידים עם שווה וקוד hash

ההבדל העיקרי בין שווה ל-hashCode ב-Java
ההבדל העיקרי בין שווה ל-hashCode ב-Java

איור 04: תוכנית ראשית

הכיתה Student מכילה את שיטות equals ו-hashCode. שיטת שווה בכיתה Student תקבל אובייקט. אם האובייקט הוא null, הוא יחזיר false.אם המחלקות של האובייקטים אינן זהות, היא תחזיר false. ערכי המזהה נבדקים בשני האובייקטים. אם הם דומים, זה יחזור נכון. אחרת זה יחזיר false.

בתוכנית הראשית נוצרים אובייקטים s1 ו-s2. בעת קריאה ל-s1.equals(s2) ייתן true כי השיטה equals היא עוקפת והיא בודקת את ערכי ה-id של שני האובייקטים. למרות שהם מתייחסים לשני אובייקטים, התשובה נכונה כי ערכי ה-id של s1 ו-s2 זהים. מכיוון שה-s1.equals(s2) נכון, ה-hashCode של s1 ו-s2 צריך להיות שווה. הדפסת ה-hashCode של s1 ו-s2 נותנת את אותו ערך. ניתן להשתמש בשיטת hashCode עם אוספים כגון HashMap.

מה ההבדל בין שווים ל-hashCode ב-Java?

שווה לעומת hashCode ב-Java

equals היא שיטה ב-Java שפועלת בדומה לאופרטור==, כלומר לבדוק זהות אובייקט ולא שוויון אובייקט. hashCode היא שיטה שבה מחלקה מפרקת באופן מרומז או מפורש את הנתונים המאוחסנים במופע של המחלקה לערך hash יחיד.
שימוש
השיטה שווה משמשת להשוואה בין שני אובייקטים. השיטה משמשת בגיבוב כדי להחליט באיזו קבוצה יש למקם אובייקט.

סיכום – שווה לעומת hashCode ב-Java

ההבדל ב-equals וב-hashCode ב-Java הוא שה-equals משמש להשוואה בין שני אובייקטים בעוד שה-hashCode משמש ב-hash כדי להחליט לאיזו קבוצה יש לסווג אובייקט.

מוּמלָץ: