Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Çıkış Yap

translation

Bu, AI tarafından çevrilen bir gönderidir.

제이온

equals() vs hashCode()

  • tr Writing language: Korece
  • tr Referans Ülke: tr Tüm ülkeler country-flag

Dil Seç

  • Türkçe
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Text summarized by durumis AI

  • equals(), nesnenin içeriğinin aynı olup olmadığını karşılaştırmak için kullanılan bir yöntemdir, hashCode() ise nesnenin benzersiz bir tamsayı değerini döndüren bir yöntemdir ve her ikisi de nesneleri karşılaştırmak için kullanılır.
  • Hash veri yapılarında, hashCode() anahtarları belirlemek için kullanıldığından, aynı hash kodunu sağlamak için equals() ve hashCode() birlikte yeniden tanımlanmalıdır.
  • equals() ve hashCode() birlikte kullanıldığında, hash veri yapılarında aynı nesneleri verimli bir şekilde yönetebilirsiniz.

equals()

equals(), nesnelerin içeriğinin aynı olup olmadığını karşılaştırır. Genellikle eşitlik karşılaştırması olarak adlandırılır ve equals() yeniden tanımlanmazsa, içsel olarak == ile aynı olduğundan aynılık karşılaştırması olur. Bu nedenle, nesneleri doğru şekilde eşitlik karşılaştırması yapmak istiyorsanız, mutlaka equals() kullanmalısınız.


public boolean equals(Object obj) { 
    return (this == obj); 


hashCode()

hashCode(), iki nesnenin aynı nesne olup olmadığını kontrol eder. == ile aynı olan aynılık karşılaştırması işlevine sahiptir, ancak hashCode() yöntemi, dönüş değeri olarak çalıştırma zamanında nesnenin benzersiz bir tamsayı değerini döndürür. Genellikle yığın üzerinde depolanan nesnenin bellek adresini döndürür.



Bu yöntem, yerel anahtar kelimeyle işaretlenmiştir; bu, Java dışındaki bir dilde geliştirilmiş bir dilin Java'da kullanılabilmesi durumunda kullanılan bir anahtar kelimedir.


Karma nedir?

Karma, karma işlevi kullanarak değişken boyutlu bir giriş değerinden sabit boyutlu bir çıktı değeri oluşturma işlemini ifade eder. Karma işlemiyle elde edilen değere karma kodu denir.


equals() ve hashCode()

Aynı nesne, aynı bellek adresine sahip olmalıdır; bu nedenle aynı nesnenin aynı karma koda sahip olması gerektiği açıktır. Bu nedenle, equals() yerine hashCode() da yeniden tanımlanarak aynı karma kodunun garanti edilmesi için kodu yazmak daha iyidir.


Karma veri yapısı

public class Main {

    public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("제이온", 23));
        people.add(new Person("제이온", 23));
        System.out.println(people.size()); // 2
    }
}

class Person {

    private final String name;

    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }


Yukarıdaki gibi HashSet veri yapısına aynı iki nesneyi ekleyelim. Bu Set'in boyutunu yazdırırsak 2 olacaktır. Neden?


Çünkü karma kullanılan veri yapısı, Key'i belirlerken hashCode() kullanır. Yani nesnelerin aynı olup olmadığını karşılaştırmadan önce, iki nesnenin karma kodlarının aynı olup olmadığını karşılaştırır ve daha sonra iki nesnenin eşit olup olmadığına karar verir. Bu durumda, hashCode() yeniden tanımlanmamışsa, Object'in hashCode() kullanılır, bu nedenle her nesnenin depolandığı bellek adresi döndürülür. Bu nedenle, karma veri yapılarını kullanırken, equals() dışında hashCode() da yeniden tanımlamak daha iyidir.


public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("제이온", 23));
        people.add(new Person("제이온", 23));
        System.out.println(people.size()); // 1
    }
}

class Person {

    private final String name;

    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }


Kaynak


Beklenen mülakat soruları ve cevapları

equals() ve hashCode() neden birlikte kullanılır?

Karma kullanılan veri yapısı, Key'i belirlerken hashCode() kullanır. Yani nesnelerin aynı olup olmadığını karşılaştırmadan önce, iki nesnenin karma kodlarının aynı olup olmadığını karşılaştırır ve daha sonra iki nesnenin eşit olup olmadığına karar verir. Bu durumda, hashCode() yeniden tanımlanmamışsa, Object'in hashCode() kullanılır, bu nedenle her nesnenin depolandığı bellek adresi döndürülür. Bu nedenle, karma veri yapılarını kullanırken, equals() dışında hashCode() da yeniden tanımlamak daha iyidir.

제이온
제이온
제이온
제이온
[Efektif Java] Madde 6: Gereksiz Nesne Oluşturmayı Önleyin Java'da gereksiz nesne oluşturmayı azaltma yöntemleri hakkında bir kılavuz. String, Boolean gibi değişmez nesneler için literalleri kullanın ve düzenli ifadeler için Pattern örneklerini önbelleğe alın. Ayrıca, otomatik kutulama performans düşüşüne neden o

28 Nisan 2024

[Java] Senkronize Edilmiş Koleksiyonlar vs Eşzamanlı Koleksiyonlar Java'da çoklu iş parçacıklı ortamlarda koleksiyonları kullanırken, eşzamanlılık sorunlarını çözmek için çeşitli yöntemleri ve avantajlarını ve dezavantajlarını karşılaştırdık. Vector, Hashtable, Collections.synchronizedXXX gibi senkronize edilmiş koleksiy

25 Nisan 2024

Java Collections Framework (JCF) nedir? - JCF'nin tanımı ve özellikleri (JAVA) Java Collections Framework (JCF), birden fazla veriyi verimli bir şekilde işlemek için standartlaştırılmış bir yöntem sağlayan bir Java sınıf koleksiyonudur. JCF, veri depolama yapıları ve algoritmaları sınıflar halinde uygulayarak kod tekrar kullanılabil

27 Nisan 2024

[Javascript] Nesne Yapısı (V8) JavaScript'teki Nesne, V8 motorunda durumuna göre yapı gibi optimize edilmiş Hızlı mod ve karma tablo olarak çalışan Sözlük moduna dönüştürülür. Hızlı mod, anahtar ve değerlerin neredeyse sabit olduğu bir biçimde hızlıdır ancak yeni bir anahtar eklendiğin
곽경직
곽경직
곽경직
곽경직
곽경직

18 Mart 2024

[Eşzamanlılık] Atomik İşlem: Bellek Çiti ve Bellek Sıralaması Bu blog yazısında, atomik işlemlerde bellek sıralamasının nasıl dikkate alınacağı ve Sıralama seçeneklerinin önemi açıklanmaktadır. Relaxed, Acquire, Release, AcqRel, SecCst gibi çeşitli Sıralama seçenekleri hakkında açıklamaların yanı sıra, her seçeneğin
곽경직
곽경직
곽경직
곽경직
곽경직

12 Nisan 2024

Kavramsal Veri Modellemesi Kavramsal veri modelleme, varlıkları ayırma ve varlıklar arasındaki ilişkileri ERD ile gösterme sürecidir. Varlıklar bağımsız bilgi birimleridir ve öznitelikler, varlığın sahip olduğu verilerdir. Tanımlayıcılar, varlıkları benzersiz bir şekilde tanımlar v
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 Nisan 2024

Mantıksal Veri Modelleme Mantıksal veri modelleme, kavramsal veri modellemeyi ilişkisel veritabanı paradigmasına göre dönüştürme sürecidir, 1:1, 1:N, N:M ilişkileri işler ve normalleştirme yoluyla veri bütünlüğünü sağlar. 1NF, 2NF, 3NF'den geçerek tabloları rafine eder ve kısmi b
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 Nisan 2024

[Bilişim alanında olmayanlar için, geliştirici olarak hayatta kalmak] 14. Yeni Başlayan Geliştiricilerin Sıkça Sorduğu Teknoloji Görüşme İçerikleri Özeti Yeni başlayan geliştiriciler için bir teknoloji görüşme hazırlık rehberidir. Ana bellek alanı, veri yapıları, RDBMS ve NoSQL, yordamsal ve nesne yönelimli, geçersiz kılma ve aşırı yükleme, sayfa değiştirme algoritmaları, süreçler ve iş parçacıkları, OSI 7
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 Nisan 2024

Rust'ın Eşzamanlılık Hatalarını Önleme Yolu Rust, eşzamanlı programlamanın zorluklarını aşmak için güçlü bir dildir. Tip sistemi ve sahiplik modeli sayesinde, iş parçacıkları arasında veri aktarımı ve paylaşımı güvenlidir. Mutex, Channel, Atomic gibi iç değişkenlik kalıpları ile paylaşılan değişken
곽경직
곽경직
곽경직
곽경직
곽경직

28 Mart 2024