SORU
10 Ocak 2013, PERŞEMBE


Neden Dize equals yöntemi kullanın karma mı?

Sınıf Dizesi equals yöntemi kodudur

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i  ] != v2[j  ])
                    return false;
            }
            return true;
        }
    }
    return false;
}

Bir soru - neden bu yöntemi hashCode kullanmaz var() ?

Biliyorum, hashCode kadarıyla() iki dizeleri hızla karşılaştırabilirsiniz.

Biliyorum, iki eşit olmayan dizeler, aynı sağlamalarının olabilir. GÜNCELLEME: Ama iki eşit dizeleri eşit karıştırır. Yani, hashCode kullanarak(), hemen iki dize eşit. görüyoruz

Sadece hashCode kullanmayı düşünüyorum() iyi olabilirfiltreequals.

GÜNCELLEME 2: Burada bazı kod hakkında burada söz ediyoruz.

Dize equals yöntemi gibi görünebilir nasıl bir örnektir

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        if (hashCode() == anotherString.hashCode()){
            int n = count;
            if (n == anotherString.count) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i  ] != v2[j  ])
                        return false;
                }
                return true;
            }
        }else{
            return false;
        }
    }
    return false;
}

CEVAP
10 Ocak 2013, PERŞEMBE


Hashcode eşitsizlik için ilk tur kontrol edilebilir. Ancak, bazı artıları ve eksileri sunar.

  1. 6* *hashcodes bir "" değeri. muhafız kullanmak için ancak tembel hesaplanmıştır Uzun ömürler, hashcode hesaplanan muhtemelen onlar ıe) ile dizeleri karşılaştırarak iseniz, bu bir sorun değil. Aksi takdirde, ya hashcode (potansiyel olarak) pahalı bilgisayar veya hashcode henüz bilgisayarlı olmadı Çek ne zaman görmezden kaldın. Eğer kısa ömürlü dizeleri bir sürü varsa, bunu kullanarak olacak daha sık check görmezden olacaksın.
  2. Gerçek dünyada, en çok dizeleri ilk hashcode kontrol ederek tasarruf olmaz ilk birkaç karakter farklı. Tabii, istisnalar (URL), ama yine oradagerçek dünyaprogramlama seyrek görülür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EatingIn

    EatingIn

    12 EKİM 2013
  • Liz Morgan

    Liz Morgan

    4 Aralık 2011
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009