Ankara
0 (312) 276 75 93
info@billgatesweb.com

Eşit Nesneler – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Web Danışmanlık Hizmeti, Seo Hizmeti Al, Mobile Uygulama Yaptır, Back Link Satın Al, Blog Yazdırmak İstiyorum, Makale YAZDIRMA siteleri, Parayla makale YAZDIRMA, Seo makale fiyatları, Sayfa başı yazı yazma ücreti, İngilizce makale yazdırma, Akademik makale YAZDIRMA, Makale Fiyatları 2022, Makale yazma, Blog Yazdırma

Eşit Nesneler – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

İstemci ve Sunucu – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Eşit Nesneler

Eşit nesnelerin aynı karma koda sahip olmasını sağlar. Bu iğrenç çünkü her nesnenin aynı karma koduna sahip olmasını sağlıyor. Bu nedenle, her nesne aynı kovaya hash olur ve hash tabloları bağlantılı listelere dejenere olur. Doğrusal zamanda çalışması gereken programlar, bunun yerine ikinci dereceden zamanda çalışır. Büyük karma tablolar için bu, çalışmak ve çalışmamak arasındaki farktır.

İyi bir karma işlevi, eşit olmayan nesneler için eşit olmayan karma kodları üretme eğilimindedir. hashCode sözleşmesinin üçüncü hükmü ile kastedilen tam olarak budur. İdeal olarak, bir karma işlevi, herhangi bir makul eşit olmayan örnek koleksiyonunu tüm olası karma değerlere eşit olarak dağıtmalıdır. Bu ideale ulaşmak son derece zor olabilir. Neyse ki, adil bir yaklaşıma ulaşmak çok zor değil.

İşte basit bir tarif:

1. Sonuç olarak adlandırılan bir int değişkeninde, örneğin 17 gibi, sıfırdan farklı bir sabit değeri saklayın.
2. Nesnenizdeki her bir önemli alan f için (yani, eşittir yöntemiyle dikkate alınan her alan), aşağıdakileri yapın:

a. Alan için bir int karma kodu c hesaplayın:

i. Alan bir boole ise, (f ? 0 : 1) hesaplayın.
ii. Alan bir bayt, karakter, kısa veya int ise, (int)f’yi hesaplayın.
iii. Alan uzunsa, (int)(f ^ (f >>> 32)) hesaplayın.
iv. Alan bir kayan nokta ise Float.floatToIntBits(f)’yi hesaplayın.
v. Alan bir double ise, Double.doubleToLongBits(f)’yi hesaplayın ve ardından sonucu 2.a.iii adımında olduğu gibi hash edin.
vi. Alan bir nesne referansıysa ve bu sınıfın eşittir yöntemi, alanı yinelemeli olarak equals’i çağırarak karşılaştırıyorsa, alanda hashCode’u yinelemeli olarak çağırır. Daha karmaşık bir karşılaştırma gerekiyorsa, bu alan için bir “kurallı gösterim” hesaplayın ve kanonik gösterimde hashCode’u çağırın. Alanın değeri null ise, 0 (veya başka bir sabit, ancak 0 gelenekseldir) döndürün.
vii. Alan bir diziyse, ona her öğe ayrı bir alanmış gibi davranın. Yani, bu kuralları yinelemeli bir şekilde uygulayarak her önemli öğe için bir karma kod hesaplayın ve bu değerleri adım 2.b’de açıklandığı gibi birleştirin.

b. Adım a’da hesaplanan karma kodu c’yi aşağıdaki gibi sonuç olarak birleştirin.
3. Sonuç döndürün.
4. hashCode yöntemini yazmayı bitirdiğinizde, kendinize eşit örneklerin eşit karma kodları olup olmadığını sorun. Değilse, nedenini bulun ve sorunu düzeltin.

Fazlalık alanları karma kod hesaplamasından çıkarmak kabul edilebilir. Başka bir deyişle, değeri hesaplanabilen herhangi bir alanın hesaplamaya dahil edilen alanlardan çıkarılması kabul edilebilir. Eşitlik karşılaştırmalarında kullanılmayan alanları hariç tutmanız gerekir. Bu alanların hariç tutulmaması, hashCode sözleşmesinin ikinci hükmünün ihlaline neden olabilir.

Adım 1’de sıfır olmayan bir başlangıç ​​değeri kullanılır, bu nedenle özet değeri, adım 2a’da hesaplandığı gibi, özet değeri sıfır olan başlangıç ​​alanlarından etkilenecektir. Adım 1’de başlangıç ​​değeri olarak sıfır kullanılmışsa, toplam karma değeri bu tür başlangıç ​​alanlarından etkilenmeyecek ve bu da çarpışmaları artırabilecektir. 17 değeri isteğe bağlıdır.

Adım 2.b’deki çarpma, karma değerini alanların sırasına bağlı hale getirir ve bu, sınıf birden fazla benzer alan içeriyorsa çok daha iyi bir karma işleviyle sonuçlanır. Örneğin, bu tarife göre oluşturulmuş bir String hash fonksiyonundan çarpma çıkarılmış olsaydı, tüm anagramlar aynı hash kodlarına sahip olacaktı.


Java Ders Notları PDF
Tab tuşu ile hizalama
Word iki nokta üst üste hizalama
Java PDF Türkçe
nesnelerin kendilerine ait özelliklerine ne denir ?
word’de hizalama çubuğu
Java Nesne Tabanlı PROGRAMLAMA Ders Notları
Java Nesne Yönelimli programlama örnekleri


Çarpan 37, tek bir asal olduğu için seçildi.  İki ile çarpma, kaydırmaya eşdeğer olduğu için Programlama Dili Kılavuzu kaybolur. Asal sayı kullanmanın avantajları daha az açıktır, ancak bu amaçla asal sayıların kullanılması gelenekseldir.

Bu tarifi PhoneNumber sınıfına uygulayalım. Hepsi kısa olan üç önemli alan vardır. Tarifin basit bir uygulaması bu hash fonksiyonunu verir.

Bu yöntem, yalnızca girdileri bir PhoneNumber örneğindeki üç önemli alan olan basit bir deterministik hesaplamanın sonucunu döndürdüğünden, eşit PhoneNumber örneklerinin eşit karma kodlarına sahip olduğu açık olmalıdır.

Bu yöntem, aslında, 1.4 sürümünden itibaren Java platformu kitaplıklarındakilerle aynı düzeyde, PhoneNumber için tamamen makul bir hashCode uygulamasıdır. Basittir, oldukça hızlıdır ve eşit olmayan telefon numaralarını farklı karma paketlere dağıtmak için makul bir iş yapar.

Bir sınıf değişmezse ve karma kodu hesaplamanın maliyeti önemliyse, her istendiğinde yeniden hesaplamak yerine karma kodunu nesnede önbelleğe almayı düşünebilirsiniz.

Bu türdeki nesnelerin çoğunun karma anahtar olarak kullanılacağına inanıyorsanız, örnek oluşturulduğunda karma kodunu hesaplamanız gerekir. Aksi takdirde, hashCode ilk kez çağrıldığında tembelce başlatmayı seçebilirsiniz (Madde 48). PhoneNumber sınıfımızın bu tedaviyi hak edip etmediği açık değil, sadece size nasıl yapıldığını göstermek içindir.

Bu öğedeki tarif oldukça iyi hash fonksiyonları sağlarken, en gelişmiş hash fonksiyonlarını sağlamaz ve Java platformu kitaplıkları da 1.4 sürümünden itibaren bu tür hash fonksiyonları sağlamaz. Bu tür karma işlevleri yazmak, aktif bir araştırma konusudur ve en iyi matematikçilere ve teorik bilgisayar bilimcilerine bırakılan bir etkinliktir.

Belki de Java platformunun daha sonraki bir sürümü, sınıfları için en gelişmiş karma işlevleri ve ortalama programcıların bu tür karma işlevleri oluşturmasına olanak tanıyan yardımcı yöntemler sağlayacaktır. Bu arada, bu maddede açıklanan teknikler çoğu uygulama için yeterli olmalıdır.

Performansı artırmak için bir nesnenin önemli kısımlarını karma kod hesaplamasından dışlamak için cazip olmayın. Elde edilen özet işlevi daha hızlı çalışabilirken, kalitesi, özet tablolarının kullanılamayacak kadar yavaşladığı noktaya kadar düşebilir. Özellikle, karma işlevi, uygulamada, göz ardı etmeyi seçtiğiniz bölgelerde büyük ölçüde farklılık gösteren geniş bir örnek koleksiyonuyla karşı karşıya kalabilir.

Bu olursa, karma işlevi tüm örnekleri çok az sayıda karma kodla eşler ve karma tabanlı koleksiyonlar ikinci dereceden performans görüntüler. Bu sadece teorik bir problem değil.

1.2 sürümünden önceki tüm Java platformu sürümlerinde uygulanan Dize karma işlevi, ilk karakterden başlayarak dize boyunca eşit aralıklarla yerleştirilmiş en fazla on altı karakter incelendi. URL’ler gibi geniş hiyerarşik ad koleksiyonları için, bu karma işlevi tam olarak burada belirtilen patolojik davranışı gösterdi.

Java platformu kitaplıklarındaki String, Integer ve Date gibi birçok sınıf, örnek değerinin bir işlevi olarak hashCode yöntemi tarafından döndürülen tam değeri belirtir.

Bu genellikle iyi bir fikir değildir, çünkü gelecekteki sürümlerde karma işlevini geliştirme yeteneğinizi ciddi şekilde sınırlar. Bir hash fonksiyonunun ayrıntılarını belirtmeden bırakırsanız ve onda bir kusur bulunursa, hash fonksiyonunun döndürdüğü tam değerlere bağlı olan istemcilerle uyumluluğu bozma korkusu olmadan bir sonraki sürümde hash fonksiyonunu düzeltebilirsiniz.


Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır. 

1) Backlink Paketi  50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)


 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

× Bize Whatsapp'tan Ulaşın