Java'da teng va hashCode o'rtasidagi farq

Mundarija:

Java'da teng va hashCode o'rtasidagi farq
Java'da teng va hashCode o'rtasidagi farq

Video: Java'da teng va hashCode o'rtasidagi farq

Video: Java'da teng va hashCode o'rtasidagi farq
Video: Overriding equals and hashCode in Java - 039 2024, Noyabr
Anonim

Asosiy farq – Java’dagi hashCode bilan teng

Tenglar==operatoriga o'xshaydi, ya'ni ob'ekt tengligini emas, balki ob'ekt identifikatorini tekshirish uchun. HashCode - bu sinf misolida saqlangan ma'lumotlarni 32 bitli imzolangan butun son bo'lgan bitta xesh qiymatiga aniq yoki aniq ravishda ajratadigan usul. Java'da teng va hashCode o'rtasidagi asosiy farq shundaki, tenglar ikkita ob'ektni solishtirish uchun ishlatiladi, hashCode esa ob'ektni qaysi guruhga toifalash kerakligini hal qilish uchun xeshlashda ishlatiladi.

Javada nima teng?

Engles usuli ikki obyektni solishtirish uchun ishlatiladi. Standart tenglashtirish usuli obyekt sinfida aniqlanadi. Ushbu dastur==operatoriga o'xshaydi. Ikki ob'ektga havolalar bir xil ob'ektga ishora qilsagina teng bo'ladi. Tengs usulini bekor qilish mumkin.

Java'da teng va hashCode o'rtasidagi farq
Java'da teng va hashCode o'rtasidagi farq

01-rasm: Java dasturi teng

System.out.println(s1.equals(s2)) bayonoti noto'g'ri javob beradi, chunki s1 va s2 ikki xil ob'ektga ishora qiladi. Bu System.out.println(s1==s2); bayonotiga oʻxshardi.

System.out.println(s1.equals(s3)) bayonoti to'g'ri javob beradi, chunki s1 va s3 bir xil ob'ektga ishora qiladi. Bu System.out.println(s1==s3); bayonotiga oʻxshardi.

Talabalar sinfida tenglik usuli mavjud emas. Shuning uchun Object sinfidagi tenglar chaqiriladi. Agar ob'ekt havolasi bir xil ob'ektga ishora qilsa, rost ko'rsatiladi.

Java_Figure 02 da teng va hashCode o'rtasidagi farq
Java_Figure 02 da teng va hashCode o'rtasidagi farq

02-rasm: bekor qilingan Java dasturi teng

Yuqoridagi dasturga ko'ra, tenglashtirish usuli bekor qilingan. Ob'ekt metodga uzatiladi va u Student ga uzatiladi. Keyin id qiymatlari tekshiriladi. Agar id qiymatlari o'xshash bo'lsa, u haqiqatni qaytaradi. Agar yo'q bo'lsa, u noto'g'ri qaytariladi. s1 va s2 ning identifikatorlari o'xshash. Shunday qilib, u haqiqiy bo'ladi. s1 va s3 identifikatorlari ham oʻxshash, shuning uchun u haqiqiy deb chop etiladi.

Java'da hashCode nima?

Xeshkod ob'ektni qaysi guruhga toifalash kerakligini hal qilish uchun xeshlashda ishlatiladi. Bir guruh ob'ektlar bir xil hashCode bilan bo'lishishi mumkin. To'g'ri xeshlash funksiyasi ob'ektlarni turli guruhlarga teng taqsimlashi mumkin.

Toʻgʻri xeshkod quyidagi xususiyatlarga ega boʻlishi mumkin. Obj1 va obj2 kabi ikkita ob'ekt bor deb faraz qiling. Agar obj1.equals(obj2) rost bo'lsa, obj1.hashCode() obj2.hashCode() ga teng. Agar obj1.equals(obj2) noto'g'ri bo'lsa, obj1.hashCode() obj2.hashCode() ga teng bo'lmasligi shart emas. Ikki teng boʻlmagan obyekt ham bir xil xeshkodga ega boʻlishi mumkin.

Java_Figure 03 da teng va hashCode o'rtasidagi farq
Java_Figure 03 da teng va hashCode o'rtasidagi farq

03-rasm: Teng va xeshkodli talaba sinfi

Java'da teng va hashCode o'rtasidagi asosiy farq
Java'da teng va hashCode o'rtasidagi asosiy farq

04-rasm: Asosiy dastur

Talabalar sinfida teng va hashCode usullari mavjud. Student sinfidagi tenglar usuli ob'ektni oladi. Agar ob'ekt null bo'lsa, u noto'g'ri qaytaradi. Agar ob'ektlarning sinflari bir xil bo'lmasa, u noto'g'ri qaytaradi. Id qiymatlari ikkala ob'ektda ham tekshiriladi. Agar ular o'xshash bo'lsa, u haqiqatga qaytadi. Aks holda u noto'g'ri bo'ladi.

Asosiy dasturda s1 va s2 obyektlari yaratilgan. s1.equals(s2) ni chaqirganda, true qiymatini beradi, chunki tenglashtirish usuli bekor qilingan va u ikkita ob'ektning id qiymatlarini tekshiradi. Garchi ular ikkita ob'ektga ishora qilsalar ham, javob to'g'ri, chunki s1 va s2 ning id qiymatlari bir xil. s1.equals(s2) to'g'ri bo'lgani uchun s1 va s2 ning hashCode kodlari teng bo'lishi kerak. s1 va s2 heshkodlarini chop etish bir xil qiymatni beradi. HashCode usulidan HashMap kabi kollektsiyalarda foydalanish mumkin.

Java'da tenglar va hashCode o'rtasidagi farq nima?

Java-dagi hashCode bilan tengdir

equals Java tilidagi==operatoriga oʻxshash usul boʻlib, u obʼyekt tengligini emas, balki obyekt identifikatorini sinab koʻradi. hashCode - bu sinfning sinf misolida saqlangan ma'lumotlarni bitta xesh qiymatiga aniq yoki aniq ajratish usuli.
Foydalanish
Engles usuli ikki obyektni solishtirish uchun ishlatiladi. Usul ob'ektni qaysi guruhga joylashtirish kerakligini aniqlash uchun xeshlashda ishlatiladi.

Xulosa – Java’dagi hashCode bilan teng

Java'da teng va hashCode o'rtasidagi farq shundaki, tenglar ikkita ob'ektni solishtirish uchun ishlatiladi, hashCode esa ob'ektni qaysi guruhga toifalash kerakligini hal qilish uchun xeshlashda ishlatiladi.

Tavsiya: