Prinsip Hash
Kaping pisanan, sadurunge nemtokake kode hash Jawa, kita kudu ngerti apa hashing lan kanggo apa. Hashing minangka proses nglamar fungsi hash kanggo sawetara data. Fungsi hash mung minangka fungsi matematika. Aja kuwatir babagan iki! "Matematika" ora mesthi tegese "rumit". Ing kene tegese mung ana sawetara data lan aturan tartamtu sing ngepetake data kasebut dadi sakumpulan karakter (kode). Contone, bisa dadi cipher heksadesimal. Kita duwe sawetara data saka ukuran apa wae ing input, lan aplikasi fungsi hash kasebut. Ing output, kita entuk data ukuran tetep, umpamane, 32 karakter. Biasane, fungsi kasebut ngowahi potongan data gedhe dadi nilai integer cilik. Asil karya fungsi iki diarani kode hash. Fungsi hash akeh digunakake ing kriptografi, lan sawetara wilayah liyane. Fungsi hash bisa beda-beda,
- Objek tartamtu duwe kode hash tartamtu.
- Yen rong obyek padha, kode hash padha. Kosok baline ora bener.
- Yen kode hash beda-beda, mula obyek kasebut ora padha.
- Objek sing beda bisa uga duwe kode hash sing padha. Nanging, iku acara banget ora mungkin. Ing titik iki, kita duwe tabrakan, kahanan, sing bisa ilang data.
Fungsi hash "tepat" nyuda kemungkinan tabrakan.
Hashcode ing Jawa
Ing Java, fungsi hash biasane disambungake menyang
metode hashCode () . Persis, asil nglamar fungsi hash menyang Obyek yaiku kode hash. Saben obyek Jawa nduweni kode hash. Umumé Kode Hash minangka nomer sing diwilang kanthi metode
hashCode () kelas
Object
. Biasane, programer override cara iki kanggo obyek uga related kanggo
hashCode () cara
padha () kanggo Processing luwih efisien data tartamtu. Metode
hashCode () ngasilake nilai int (4 bita), sing minangka representasi numerik saka obyek kasebut. Kode hash iki digunakake, umpamane, koleksi kanggo panyimpenan data sing luwih efisien lan, kanthi mangkono, akses sing luwih cepet. Secara default,
kode hash()fungsi kanggo obyek ngasilake nomer sel memori ngendi obyek disimpen. Mulane, yen ora ana owah-owahan ing kode aplikasi, fungsi kasebut kudu ngasilake nilai sing padha. Yen kode rada owah, nilai hashcode uga owah. Apa kode hash digunakake ing Jawa? Kaping pisanan, kode hash Jawa mbantu program mlaku luwih cepet. Contone, yen kita mbandhingaké loro obyek
o1
lan
o2
sawetara jinis, operasi
o1.equals(o2)
njupuk bab 20 kaping luwih saka
o1.hashCode() == o2.hashCode()
.
Jawa padha ()
Ing kelas induk
Object
, bebarengan karo cara
hashCode () , ana uga
padha () , fungsi sing digunakake kanggo mriksa podo loro obyek. Implementasi standar fungsi iki mung mriksa pranala saka rong obyek kanggo padha karo.
witjaksono () lan
hashCode () duwe kontrak sing, supaya yen sampeyan ngalahake salah siji saka wong-wong mau, sampeyan kudu ngalahake liyane, supaya ora break kontrak iki.
Ngleksanakake metode hashCode().
Tuladha
Ayo nggawe
Karakter kelas kanthi siji lapangan —
jeneng . Sawise iku, kita nggawe rong obyek kelas
Karakter ,
karakter1 , lan
karakter2 lan nyetel jeneng sing padha. Yen kita nggunakake standar
hashCode () lan
witjaksono () saka kelas
Obyek , kita bakal temtunipun njaluk beda, ora obyek witjaksono.Mangkene carane hashcode ing Jawa dianggo. Dheweke bakal duwe kode hash sing beda amarga ana ing sel memori sing beda lan asil operasi
sing padha () bakal palsu.
import java.util.Objects;
public class Character {
private String Name;
public Character(String name) {
Name = name;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public static void main(String[] args) {
Character character1 = new Character("Arnold");
System.out.println(character1.getName());
System.out.println(character1.hashCode());
Character character2 = new Character("Arnold");
System.out.println(character2.getName());
System.out.println(character2.hashCode());
System.out.println(character2.equals(character1));
}
}
Asil saka mbukak program:
Arnold
1595428806
Arnold
1072408673
false
Loro nomer 10 digit ing console minangka kode hash. Apa yen kita pengin duwe obyek sing padha yen padha duwe jeneng sing padha? Apa sing kudu kita lakoni? Wangsulan: Bab ingkang utama kita kudu ngatasi
hashCode () lan
padha () metode kelas
Obyek kanggo kelas
Karakter . Kita bisa nindakake kanthi otomatis ing IDEA IDE, mung pencet
alt + insert ing keyboard banjur pilih
Generate -> equals() lan hashCode() .
![Apa Java hashCode() - 2]()
Ing kasus conto, kita entuk kode sabanjure:
import java.util.Objects;
public class Character {
private String Name;
public Character(String name) {
Name = name;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Character)) return false;
Character character = (Character) o;
return getName() != null ? getName().equals(character.getName()) : character.getName() == null;
}
@Override
public int hashCode() {
return getName() != null ? getName().hashCode() : 0;
}
public static void main(String[] args) {
Character character1 = new Character("Arnold");
System.out.println(character1.getName());
System.out.println(character1.hashCode());
Character character2 = new Character("Arnold");
System.out.println(character2.getName());
System.out.println(character2.hashCode());
System.out.println(character2.equals(character1));
}
}
Asil saka mbukak kode iki:
Arnold
1969563338
Arnold
1969563338
true
Dadi saiki program kasebut ngenali obyek kita padha lan duwe kode hash sing padha.
Tuladha kode hash Jawa:
Kode hash sampeyan dhewe () lan padha karo ()
Sampeyan uga bisa nggawe padha dhewe
() lan
hashCode () realisasi, nanging ati-ati lan elinga nyilikake tabrakan hashcode. Iki minangka conto metode
hashCode () lan
padha () ing kelas
Siswa :
import java.util.Date;
public class Student {
String surname;
String name;
String secondName;
Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases
public Student(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
@Override
public int hashCode(){
//TODO: check for nulls
//return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
return (surname + name + secondName + birthday).hashCode();
}
@Override
public boolean equals(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));
}
}
Lan kelas
Utama kanggo nduduhake karyane:
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
public class Main {
static HashMap<Student, Integer> cache = new HashMap<Student, Integer>(); // <person, targetPriority>
public static void main(String[] args) {
Student sarah1 = new Student("Sarah","Connor", "Jane", null);
Student sarah2 = new Student("Sarah","Connor", "Jane", new Date(1970, 01-1, 01));
Student sarah3 = new Student("Sarah","Connor", "Jane", new Date(1959, 02-1, 28)); // date not exists
Student john = new Student("John","Connor", "Kyle", new Date(1985, 02-1, 28)); // date not exists
Student johnny = new Student("John","Connor", "Kyle", new Date(1985, 02-1, 28)); // date not exists
System.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(new Date(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));
}
}
Apa hashcode digunakake?
Kaping pisanan, kode hash mbantu program mlaku luwih cepet. Contone, yen kita mbandhingaké loro obyek
o1
lan
o2
sawetara jinis, operasi
o1.equals(o2)
njupuk bab 20 kaping luwih saka o1.hashCode () == o2.hashCode (). Ing prinsip hashing Jawa ngadeg konco sawetara koleksi populer, kayata
HashMap ,
HashSet lan
HashTable .
Kesimpulan
Saben obyek Jawa nduweni
metode hashCode () lan
padha () sing diwarisake saka kelas
Obyek . Kanggo entuk mekanisme kesetaraan kerja sing apik, sampeyan kudu ngilangi metode
hashcode () lan
padha () kanggo kelas sampeyan dhewe. Nggunakake kode hash ndadekake program bisa mlaku luwih cepet.
GO TO FULL VERSION