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.
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.
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.
03-rasm: Teng va xeshkodli talaba sinfi
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.