سڀ کان پهريان، اسان جاوا هيش ڪوڊ جي وضاحت ڪرڻ کان اڳ، اسان کي سمجهڻ جي ضرورت آهي ته هيشنگ ڇا آهي ۽ اهو ڇا لاء آهي. هشنگ ڪجهه ڊيٽا تي هش فنڪشن لاڳو ڪرڻ جو هڪ عمل آهي. هيش فنڪشن صرف هڪ رياضياتي فنڪشن آهي. هن جي باري ۾ پريشان نه ڪريو! "رياضياتي" جو مطلب هميشه "پيچيده" نه آهي. هتي ان جو مطلب صرف اهو آهي ته اسان وٽ ڪجهه ڊيٽا ۽ هڪ خاص قاعدو آهي جيڪو ڊيٽا کي نقشي جي هڪ سيٽ (ڪوڊ) ۾ ٺاهي ٿو. مثال طور، اهو ٿي سگهي ٿو هيڪساڊيڪل سيفر. اسان وٽ ان پٽ تي ڪنهن به سائيز جي ڪجهه ڊيٽا آهي، ۽ ان تي هڪ هش فنڪشن لاڳو ڪريو. ٻاھر نڪرڻ تي، اسان ھڪڙي مقرر ٿيل ڊيٽا حاصل ڪندا آھيون، چون ٿا، 32 اکر. عام طور تي، اهڙي قسم جي فنڪشن کي ڊيٽا جي هڪ وڏي ٽڪري کي ننڍي انٽيجر جي قيمت ۾ تبديل ڪري ٿو. هن فنڪشن جي ڪم جي نتيجي کي هيش ڪوڊ سڏيو ويندو آهي. هيش فنڪشن وڏي پيماني تي استعمال ٿيل آهن cryptography، ۽ ڪجهه ٻين علائقن ۾ پڻ. Hash افعال مختلف ٿي سگهن ٿا، پر انهن سڀني کي ڪجهه خاصيتون آهن:
هڪ خاص اعتراض هڪ خاص hashcode آهي.
جيڪڏهن ٻه شيون برابر آهن، انهن جا هيش ڪوڊ ساڳيا آهن. ريورس سچ نه آهي.
جيڪڏهن هيش ڪوڊ مختلف آهن، پوء شيون پڪ سان برابر نه آهن.
ڪنسول ۾ ٻه 10-عددي نمبر هيش ڪوڊ آهن. ڇا اسان چاهيون ٿا ته برابر شيون هجن جيڪڏهن انهن جا نالا ساڳيا هجن؟ اسان کي ڇا ڪرڻ گهرجي؟ جواب: اسان کي اوور رائڊ ڪرڻ گهرجي hashCode() ۽ equals() طريقن جي Object class جي اسان جي ڪردار ڪلاس لاءِ . اسان اهو خود بخود IDEA IDE ۾ ڪري سگهون ٿا، صرف پريس ڪريو alt + insert پنهنجي ڪيبورڊ تي ۽ چونڊيو Generate -> equals() ۽ hashCode() . اسان جي مثال جي صورت ۾ اسان کي ايندڙ ڪوڊ مليو آهي:
تنهن ڪري هاڻي پروگرام اسان جي شين کي برابر طور سڃاڻي ٿو ۽ انهن وٽ ساڳيا هيش ڪوڊ آهن.
Java hashcode مثال:
توهان جو پنهنجو هيش ڪوڊ () ۽ برابر ()
توهان پڻ ٺاهي سگهو ٿا پنهنجون برابر () ۽ hashCode() حقيقتون، پر محتاط رهو ۽ ياد رکو ته هيش ڪوڊ جي ٽڪرن کي گھٽ ڪرڻ لاءِ. هتي شاگردن جي طبقي ۾ اسان جي پنهنجي hashCode() ۽ equals() طريقن جو هڪ مثال آهي :
importjava.util.Date;publicclassStudent{String surname;String name;String secondName;Long birthday;// Long instead of long is used by Gson/Jackson json parsers and various orm databasespublicStudent(String surname,String name,String secondName,Date birthday ){this.surname = surname;this.name = name;this.secondName = secondName;this.birthday = birthday ==null?0: birthday.getTime();}//Java hashcode example@OverridepublicinthashCode(){//TODO: check for nulls//return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());return(surname + name + secondName + birthday).hashCode();}@Overridepublicbooleanequals(Object other_){Student other =(Student)other_;return(surname ==null|| surname.equals(other.surname))&&(name ==null|| name.equals(other.name))&&(secondName ==null|| secondName.equals(other.secondName))&&(birthday ==null|| birthday.equals(other.birthday));}}
۽ مکيه طبقو سندن ڪم جو مظاهرو ڪرڻ لاء:
importjava.util.Date;importjava.util.HashMap;importjava.util.Hashtable;publicclassMain{staticHashMap<Student,Integer> cache =newHashMap<Student,Integer>();// <person, targetPriority>publicstaticvoidmain(String[] args){Student sarah1 =newStudent("Sarah","Connor","Jane",null);Student sarah2 =newStudent("Sarah","Connor","Jane",newDate(1970,01-1,01));Student sarah3 =newStudent("Sarah","Connor","Jane",newDate(1959,02-1,28));// date not existsStudent john =newStudent("John","Connor","Kyle",newDate(1985,02-1,28));// date not existsStudent johnny =newStudent("John","Connor","Kyle",newDate(1985,02-1,28));// date not existsSystem.out.println(john.hashCode());System.out.println(johnny.hashCode());System.out.println(sarah1.hashCode());System.out.println();
cache.put(sarah1,1);
cache.put(sarah2,2);
cache.put(sarah3,3);System.out.println(newDate(sarah1.birthday));System.out.println();
cache.put(john,5);System.out.println(cache.get(john));System.out.println(cache.get(johnny));
cache.put(johnny,7);System.out.println(cache.get(john));System.out.println(cache.get(johnny));}}
hashcode ڇا لاء استعمال ڪيو ويندو آهي؟
سڀ کان پهريان hashcodes پروگرامن کي تيز هلائڻ ۾ مدد ڪن ٿا. مثال طور، جيڪڏهن اسان ٻن شين جو مقابلو ڪيو o1۽ o2ڪجهه قسم جو، آپريشن o1.equals(o2)o1.hashCode() == o2.hashCode() جي ڀيٽ ۾ 20 ڀيرا وڌيڪ وقت وٺندو آهي. جاوا ۾ هيشنگ اصول ڪجهه مشهور مجموعن جي پويان بيٺل آهي، جهڙوڪ HashMap ، HashSet ۽ HashTable .
نتيجو
هر جاوا آبجیکٹ وٽ hashCode() ۽ equals() طريقا آبجیکٹ ڪلاس مان ورثي ۾ مليا آهن. سٺو ڪم ڪرڻ جي برابري واري ميڪانيزم حاصل ڪرڻ لاءِ، توھان بھتر آھيو override hashcode() and equals() طريقن پنھنجي پنھنجي ڪلاسن لاءِ. hashcodes استعمال ڪندي پروگرامن کي تيزيءَ سان هلائي ٿو.
GO TO FULL VERSION