Java тіліндегі тең және хэш-код арасындағы айырмашылық

Мазмұны:

Java тіліндегі тең және хэш-код арасындағы айырмашылық
Java тіліндегі тең және хэш-код арасындағы айырмашылық

Бейне: Java тіліндегі тең және хэш-код арасындағы айырмашылық

Бейне: Java тіліндегі тең және хэш-код арасындағы айырмашылық
Бейне: Көктемгі AOP шынымен қалай жұмыс істейді [Көктемгі AOP саяхаты - 2 бөлім] 2024, Шілде
Anonim

Негізгі айырмашылық – Java тіліндегі хэшкодқа тең

Теңдіктер==операторына ұқсас, ол нысан теңдігін емес, нысан сәйкестігін тексеруге арналған. hashCode класс данасында сақталған деректерді 32 биттік қолтаңбалы бүтін сан болып табылатын бір хэш мәніне анық немесе айқын түрде бөлетін әдіс. Java тіліндегі тең мәндер мен hashCode арасындағы негізгі айырмашылық мынада: тең екі нысанды салыстыру үшін пайдаланылады, ал хэшкод нысанды қай топқа бөлу керектігін шешу үшін хэшингте қолданылады.

Java тіліндегі теңдік дегеніміз не?

Tengs әдісі екі нысанды салыстыру үшін пайдаланылады. Әдепкі тең әдіс нысан класында анықталған. Бұл іске асыру==операторына ұқсас. Екі нысан сілтемелері бір нысанға нұсқаған жағдайда ғана тең болады. Теңдеу әдісін қайта анықтауға болады.

Java тіліндегі тең және hashCode арасындағы айырмашылық
Java тіліндегі тең және hashCode арасындағы айырмашылық

01-сурет: Java бағдарламасы тең

System.out.println(s1.equals(s2)) операторы жалған жауап береді, себебі s1 және s2 екі түрлі нысанға сілтеме жасайды. Бұл System.out.println(s1==s2); мәлімдемесіне ұқсас болды.

System.out.println(s1.equals(s3)) мәлімдемесі дұрыс жауап береді, себебі s1 және s3 бір нысанға сілтеме жасайды. Бұл System.out.println(s1==s3); мәлімдемесіне ұқсас болды.

Студент сыныбында теңдік әдісі жоқ. Сондықтан Object класындағы теңдіктер шақырылады. "True" мәні тек нысан сілтемесі бір нысанға нұсқайтын болса ғана көрсетіледі.

Java_Figure 02 ішіндегі тең және hashCode арасындағы айырмашылық
Java_Figure 02 ішіндегі тең және hashCode арасындағы айырмашылық

02-сурет: Қайта анықталған Java бағдарламасы тең

Жоғарыдағы бағдарламаға сәйкес теңдік әдісі қайта анықталған. Нысан әдіске жіберіледі және ол Студентке шығарылады. Содан кейін id мәндері тексеріледі. Егер идентификатор мәндері ұқсас болса, ол шын мәнін қайтарады. Олай болмаса, ол жалғанды қайтарады. s1 және s2 идентификаторлары ұқсас. Осылайша, ол шындықты басып шығарады. s1 және s3 идентификаторлары да ұқсас, сондықтан ол шын деп басып шығарады.

Java тіліндегі хэшкод дегеніміз не?

Хэшкод нысанды қай топқа бөлу керектігін шешу үшін хэштеу кезінде пайдаланылады. Нысандар тобы бірдей хэшкодты ортақ пайдалана алады. Дұрыс хэштеу функциясы нысандарды әртүрлі топтарға біркелкі тарата алады.

Дұрыс хэшкод келесі сипаттарға ие болуы мүмкін.obj1 және obj2 сияқты екі нысан бар деп есептейік. Егер obj1.equals(obj2) шын болса, онда obj1.hashCode() obj2.hashCode() мәніне тең. Егер obj1.equals(obj2) жалған болса, obj1.hashCode() параметрінің obj2.hashCode() мәніне тең болмауы қажет емес. Екі бірдей емес нысанның хэшкоды бірдей болуы мүмкін.

Java_Figure 03 ішіндегі тең және hashCode арасындағы айырмашылық
Java_Figure 03 ішіндегі тең және hashCode арасындағы айырмашылық

03-сурет: тең және хэшкоды бар студент сыныбы

Java тіліндегі тең және hashCode арасындағы негізгі айырмашылық
Java тіліндегі тең және hashCode арасындағы негізгі айырмашылық

04-сурет: Негізгі бағдарлама

Студент сыныбы тең және hashCode әдістерін қамтиды. Студент класындағы теңдік әдісі нысанды алады. Егер нысан нөл болса, ол жалған мәнін қайтарады. Егер нысандардың сыныптары бірдей болмаса, ол жалған мәнін қайтарады. Идентификатор мәндері екі нысанда да тексеріледі. Егер олар ұқсас болса, ол шындыққа оралады. Әйтпесе ол "жалған" мәнін қайтарады.

Негізгі бағдарламада s1 және s2 нысандары жасалады. s1.equals(s2) шақыру кезінде true мәнін береді, себебі теңдік әдісі қайта анықталған және ол екі нысанның id мәндерін тексереді. Олар екі нысанға сілтеме жасаса да, жауап дұрыс, себебі s1 және s2 идентификатор мәндері бірдей. s1.equals(s2) шын болғандықтан, s1 және s2 хэшкоды тең болуы керек. s1 және s2 хэшкодын басып шығару бірдей мән береді. hashCode әдісін HashMap сияқты жинақтармен пайдалануға болады.

Java тіліндегі тең және хэш-кодтың айырмашылығы неде?

Java тіліндегі хэшкодқа тең

equals – Java тіліндегі==операторына ұқсас әрекет ететін әдіс, ол нысан теңдігін емес, нысан сәйкестігін сынауға арналған. хэшкод – класс данасында сақталған деректерді бір хэш мәніне жанама немесе айқын түрде бөлетін әдіс.
Пайдалану
Tengs әдісі екі нысанды салыстыру үшін пайдаланылады. Бұл әдіс нысанды қай топқа орналастыру керектігін шешу үшін хэштеуде қолданылады.

Қорытынды – Java тіліндегі хэшкодқа тең

Java тіліндегі тең мәндер мен хэшкодтың айырмашылығы мынада: тең екі нысанды салыстыру үшін пайдаланылады, ал хэшкоды нысанды қай топқа бөлу керектігін шешу үшін хэшингте қолданылады.

Ұсынылған: