معرفی کامل متد hashcode
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
معرفی کامل متد hashcode در جاوا
در جلسه گذشته با متد equals آشنا شدیم. در این جلسه میخواهیم با متد hashCode آشنا شویم.
هر آبجکت و متغیر تعریف شده یک کد hash دارد(عدد بر مبنای 16) که در مواقعی میتواند باعث بروز مشکلاتی شود.
تابع hashCode نیز دورن کلاس object وجود دارد و میتوان درون کلاس ها آن را override کرد.
برای مشاهده کد hash هر شی میتوانید از تابع hash درون کلاس objects استفاده کنید.
public static void main(String[] args) {
int x=20;
int y=20;
int z=10;
System.out.println(Objects.hash(x));
System.out.println(Objects.hash(y));
System.out.println(Objects.hash(z));
}
خروجی
51
51
41
همانطور که مشاهده میکنید اگر مقدار درون متغیر برابر باشد کد hash یکسان میدهد. اما برای آبجکتهای تعریف شده از کلاسها اینطور نیست. به مثال زیر دقت کنید.
public static void main(String[] args) {
Person person1=new Person(1,"mehdi","abbasi");
Person person2=new Person(2,"ali","rezaie");
Person person3=new Person(2,"ali","rezaie");
System.out.println(person1);
System.out.println(person2);
System.out.println(person3);
}
کلاس person را از پروژه جلسه قبل کپی کرده ایم.
خروجی
com.darsman.Person@1b6d3586
com.darsman.Person@4554617c
com.darsman.Person@74a14482
در ابتدا نام پکیچ و نام کلاس را نمایش میدهد که برابر با com.darsman.Person است و جلوی کاراکتر @ hashCode شده هر شی را نمایش میدهد. اما همانطور که مشاهده میکنید person2 و person3 با وجود مقدار برابر، hashCode متفاوتی دارند.
برای همین در جلسه گذشته قبل از override کردن متد equals زمانی که دو شی با مقدار برابر را مقایسه کردیم جواب false میآمد. در واقع متد equals ابتدا hashCode دو شی را بررسی میکند و اگر hashCode دو شی برابر نباشد جواب را false میدهد.
همچنین در ساختار set که ساختاری مشابه لیستها دارند ولی عناصر تکراری درون خود را پاک میکند(در ادامه دوره با انواع ساختار ها در زبان جاوا آشنا می شویم). hashCode آبجکت آهمیت زیادی دارد و می تواند باعث بروز مشکلاتی شود بنابراین توصیه میشود زمانی که تابع equals را دورن کلاس override کردید تابع hashCode را نیز override کنید.
باعث افتخار هست که توانستیم با یک دوره جامع و کامل دیگر در خدمت شما عزیزان باشیم. این دوره فعلا شامل 56 جلسه آموزش با 1627 دقیقه است و در حال برگزاری و اضافه شدن مطالب میباشد، حتی ممکن است زمانی که این متن را میخوانید تعداد جلسات و تایم آن نیز بیشتر شده باشد، شما میتوانید با تهیه این دوره به همه جلسات و بخش های آن دسترسی داشته باشید.
شما درسمنی های عزیز هر گونه سوال یا ابهامی از این جلسه داشتید میتوانید به انجمن برنامه نویسان جاوا مراجعه کنید و سوالات خود را بپرسید.
ممنون از همراهی شما
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.