Java'дагы барабар жана hashCode ортосундагы айырма

Мазмуну:

Java'дагы барабар жана hashCode ортосундагы айырма
Java'дагы барабар жана hashCode ортосундагы айырма

Video: Java'дагы барабар жана hashCode ортосундагы айырма

Video: Java'дагы барабар жана hashCode ортосундагы айырма
Video: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"] 2024, Июль
Anonim

Негизги айырма – Javaдагы hashCode менен барабар

Теңдештер==операторуна окшош, ал объект теңдигин эмес, объекттин идентификациясын текшерүү үчүн. hashCode класстын класстын инстанциясында сакталган берилиштерин 32 бит кол коюлган бүтүн сан болгон бир хэш маанисине кыйыр же ачык бөлгөн ыкма. Java'дагы барабарлар менен hashCode ортосундагы негизги айырма, барабар эки объектти салыштыруу үчүн колдонулат, ал эми hashCode объектти кайсы топко категориялаштыруу керектигин чечүүдө хэширлөөдө колдонулат.

Java'да эмнелер барабар?

барабар ыкмасы эки объектти салыштыруу үчүн колдонулат. Демейки барабар ыкмасы объект классында аныкталган. Бул ишке ашыруу==операторуна окшош. Эки объектке шилтемелер бир эле объектти көрсөтүп жаткан учурда гана бирдей болот. Бул барабар ыкмасын жокко чыгарууга болот.

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-сүрөт: Overridden менен Java программасы барабар

Жогорудагы программага ылайык, барабар ыкмасы жокко чыгарылган. Объект методго өткөрүлүп берилет жана ал Студентке чыгарылат. Андан кийин, id маанилери текшерилет. Эгерде id маанилери окшош болсо, ал чындыкты кайтарат. Болбосо, ал false кайтып келет. s1 жана s2 идентификаторлору окшош. Ошентип, ал чындыкка басып чыгарат. s1 менен s3 идентификаторлору да окшош, андыктан ал чындык деп басылып чыгат.

Java'да hashCode деген эмне?

Хешкод хэширлөөдө объект кайсы топко категорияга бөлүнөрүн чечүүдө колдонулат. Объекттердин тобу бир эле hashCode менен бөлүшө алат. Туура хэшинг функциясы объекттерди ар кандай топторго бирдей бөлүштүрө алат.

Туура хешкод төмөнкүдөй касиеттерге ээ болушу мүмкүн.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 ыкмаларын камтыйт. Студент классындагы барабар ыкмасы объектти алат. Эгерде объект нөл болсо, анда ал жалганды кайтарат. Эгерде объекттердин класстары бирдей болбосо, анда ал жалганды кайтарат. Id маанилери эки объектте тең текшерилет. Эгер алар окшош болсо, бул чындыкка кайтып келет. Болбосо, ал "false" болуп калат.

Негизги программада s1 жана s2 объекттери түзүлөт. Чакырганда s1.equals(s2) чындыкты берет, анткени equals ыкмасы жокко чыгарылган жана ал эки объекттин id маанилерин текшерет. Алар эки объектке кайрылып жатканына карабастан, жооп туура, анткени s1 жана s2нин id маанилери бирдей. s1.equals(s2) чындык болгондуктан, s1 менен s2нин хешкоду бирдей болушу керек. s1 жана s2 хэшкодун басып чыгаруу бирдей маанини берет. HashCode ыкмасын HashMap сыяктуу Коллекциялар менен колдонсо болот.

Жавадагы барабар жана hashCode ортосунда кандай айырма бар?

Java'дагы hashCode менен барабар

equals – Java тилиндеги==операторуна окшош ыкма, ал объект теңдигин эмес, объекттин идентификациясын сынайт. hashCode класстын класстын инстанциясында сакталган дайындарды бир хэш маанисине кыйыр же ачык бөлгөн ыкма.
Колдонуу
барабар ыкмасы эки объектти салыштыруу үчүн колдонулат. Метод хэшингде объект кайсы топко жайгаштырылышы керек экенин аныктоо үчүн колдонулат.

Корытынды – Javaдагы hashCode менен барабар

Java'дагы барабарлар менен hashCode айырмасы - барабар эки объектти салыштыруу үчүн колдонулат, ал эми hashCode объект кайсы топко бөлүнөрүн аныктоо үчүн хэшингде колдонулат.

Сунушталууда: