hashCode(), equals()

Kategori: Java , 13 Temmuz 2019 , JanFranco


Java Collection FrameWork içinde bulunan Set sınıfında biliyoruz ki bir obje, element eşsiz olmalıdır. Birbirinin kopyası iki veri aynı veri yapısında barınamazlar. Bunu int, string gibi değişkenlerde kontrol edebiliyoruz ancak kendi sınıflarımızı oluşturduğumuzda iki objenin aynı olup olmadığını nasıl kontrol edeceğiz? Bu problemi çözebilmek için equals methodunu override edip, eşitlik durumlarını değiştirebiliriz. Ayrıca hashCode methodunu da override edip, hash fonksiyonunu değiştirebiliriz. Görelim, Player adında bir sınıf açalım:


static class Player{
	
	private String isim;
	private int ID;

	public Player(String isim, int ID) {
		this.isim = isim;
		this.ID = ID;
	}

	@Override
	public String toString() {
		return "|||| ID: " + ID + " İsim: " + isim + " ||||";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ID;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Player other = (Player) obj;
		if (ID != other.ID)
			return false;
		if (isim == null) {
			if (other.isim != null)
				return false;
		} else if (!isim.equals(other.isim))
			return false;
		return true;
	}
	
}
equals methodunda tüm olası ihtimallere düşündük ve isim, ID değişkenlerine göre true - false döndürdük. hashCode methodunu da override edip kendi hash fonksiyonumuzu yazdık. main fonksiyonunda Player sınıfından objeler oluşturalım ve hashSet veri yapısında saklayalım:

Set<Player> hashSet = new HashSet<Player>();

Player player1 = new Player("Jan Franco", 1);
Player player2 = new Player("Jane Franco", 10);
Player player3 = new Player("Francooooooo", 6);
Player player4 = new Player("Jan Franco", 1);

hashSet.add(player1);
hashSet.add(player2);
hashSet.add(player3);
hashSet.add(player4);

for(Player player : hashSet){
	System.out.println(player);
}
Konsolda:

|||| ID: 1 İsim: Jan Franco ||||
|||| ID: 6 İsim: Francooooooo ||||
|||| ID: 10 İsim: Jane Franco ||||
Gördüğünüz gibi aynı ID ve aynı isimli obje yani player4 veri yapısında saklanmadı.


Sonraki Yazı: HashMap ile Karakter Frekansı
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın