Java'da HashMap ve Hashtable Arasındaki Fark

Yazar: Laura McKinney
Yaratılış Tarihi: 2 Nisan 2021
Güncelleme Tarihi: 5 Mayıs Ayı 2024
Anonim
Java'da HashMap ve Hashtable Arasındaki Fark - Teknoloji
Java'da HashMap ve Hashtable Arasındaki Fark - Teknoloji

İçerik


HashMap ve Hashtable, her ikisi de bir nesne grubu temsil edilenler çift. Her biri çift ​​denir giriş nesne, cisim. Toplamak Girişler, HashMap ve Hashtable nesnesi tarafından belirtilir. Koleksiyondaki anahtarlar benzersiz veya ayırt edici olmalıdır. HashMap ve Hashtable arasındaki fark şudur: HashMap özellikle Harita arayüzünü uygular. hashtable'a Harita arayüzünü uygulamak için yeniden yapılandırılmış olan Sözlük sınıfını (eski sınıf) genişletir. Diğer önemli fark, HashMap'in nesnelerinin olmasıdır. eşitlenmemiş Oysa Hashtable’ın nesneleri senkronize.

HashMap ve Hashtable arasındaki bazı farklılıkları öğrenmek için aşağıda gösterilen karşılaştırma tablosuna bakalım.

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. benzerlikler
  5. Sonuç

Karşılaştırma Tablosu

Karşılaştırma için temelHashMaphashtable'a
Uygula / UzatHashMap sınıfı, Harita arabirimini uygular ve bir AbstractMap sınıfını genişletir.Hashtable, Dictionary Legacy sınıfını genişletiyor, ancak yeniden tasarlandı ve şimdi de Harita arayüzünü uyguluyor.
SenkronizasyonHashMap senkronize edilmez ve bu nedenle HashMap nesnesi güvenli bir şekilde dişli değildir.Hashtable senkronize edilir ve dolayısıyla Hashtable'ın nesnesi thread güvenlidir.
Tuşlar / DeğerBir anahtar Null değerini yalnızca bir kez döndürür, ancak bir değer Null değerini istediğiniz zaman döndürür.Bir anahtar, karma tablosunun bir dizini olarak kullanılacak karma kodunu elde etmek için kullanıldığından Null değerini döndüremez ve bir değer Null değerini döndüremez.
Varsayılan İlk KapasiteHashMap’in varsayılan başlangıç ​​kapasitesi 16’dır.Hashtable'ın varsayılan başlangıç ​​kapasitesi 11'dir.
TraversingHashMap yineleyici tarafından geçildi.Harita sınıfı gibi Hashtable da geçiş için doğrudan Iterator'ı desteklemiyor ve dolayısıyla Numaralandırıcıyı kullanıyor.


HashMap'un tanımı

HashMap, uygulayan bir sınıftır harita arayüzünü genişletir ve AbstractMap sınıf hash tablosunu kullanır. HashMap’in nesnesi, bir koleksiyona / grubuna atıfta bulunur. Her bir anahtarın belirli bir değerle eşlendiği Koleksiyondaki anahtarlar, değeri almak için kullanıldığı gibi benzersiz olmalıdır. Öte yandan, koleksiyondaki değerler çoğaltılabilir. HashMap sınıfı ve HashMapclass kurucularının bildirimi şöyledir:

/ * K, anahtarı temsil eder ve V, * / class HashMap değerini temsil eder. / * HashMap sınıfı yapıcıları * / HashMap () HashMap (Harita <? K,? V değerini uzatır> m) HashMap (int kapasite) HashMap (int kapasite, float fillRatio)

İlk yapıcı, varsayılan kapasitesi 16 ve varsayılan doldurma oranı 0.75 olan boş bir HashMap nesnesini başlatan varsayılan bir yapıcıdır. İkinci yapıcı, karma haritasını m değeriyle başlatır. Üçüncü kurucu, “kapasite” argümanında verilen değere karşılık gelen ilk kapasiteye sahip bir karma haritası oluşturur. Dördüncü kurucu, parametrelerde sağlanan kapasite ve doldurma oranına sahip bir karma haritası başlatır. Şimdi bir karma haritadaki girişleri nasıl besleyeceğimizi öğrenelim.


Hashmap hm = yeni Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Ürdün", 200); System.out.ln (hm); / * çıkış * / {Vijay = 250, Jonny = 150, Ajay = 275, Ürdün = 200}

Yukarıdaki kodda, boş bir HashMap nesnesi oluşturduğumu görebilirsiniz. hm varsayılan başlangıç ​​kapasitesi ve varsayılan doldurma oranı ile. Daha sonra, anahtarı değere eşleyen put (K, V) yöntemini kullanarak karma haritaya dört giriş ekledim. Girme sırası sabit olmadığından, girişlerin beslediğiniz sırada sıralanmadığını görebilirsiniz. Şimdiden bir girişiniz olduğunu göz önünde bulundurun karma haritasına ve daha sonra put (K1, V5) eklemeye çalıştığınızda, aynı anahtarı farklı bir değerle eşlemeye çalışırsınız. Daha sonra put yöntemi eski V1 değerini yeni V2 ile değiştirir ve eski VV değerini döndürür, aksi halde, bir anahtarın değerini hiçbir zaman değiştirmeyi denemezsek, o zaman put yöntemi bu anahtar için Null döndürür.

Hashtable'un tanımı

Hashtable, genişleten bir sınıftır Sözlük eski bir sınıf olan ve uygulamak üzere yeniden yapılandırılan sınıf harita arayüz. Hashtable, karma tablosunu veri yapısı olarak kullanır. Hashtable, HashMap'a benzer, burada Hashtable'ın amacı, her girişin bir çift olduğu girişlerin toplanması anlamına gelir. . Bir koleksiyondaki tüm anahtarlar diğer taraftan benzersiz olmalıdır, değerler kopyalanabilir. Anahtarlar, dizine karar veren karma kod değerini elde etmek için kullanılır. çifti karma tablosunda saklanır. Bir karma tablosunda ne bir anahtar ne de bir değer Null işaretçisini döndüremez. Hashtable sınıfının ilanını ve karma sınıf yapıcılarını görelim.

/ * K, anahtarı belirtir ve V, * / class Hashtable anahtarıyla ilişkilendirilen değeri belirtir / * Hashtable * / Hashtable () yapıcıları Hashtable (int büyüklüğü) Hashtable (int büyüklüğü, float fillRatio) Hashtable (Harita <? K,? V> m'yi uzatır)

Yukarıdaki kodda, birinci yapıcı, Hashtable sınıfından boş bir nesne oluşturan varsayılan yapıcıdır, varsayılan boyutu 11'dir ve varsayılan doldurma oranı 0,75'tir. İkinci yapıcı, “boyut” parametresinde sağlanan değere karşılık gelen boyutta bir karma tablo oluşturur. Üçüncü yapıcı, parametrede sağlanan boyut ve doldurma oranlı bir karma tablosu oluşturur. Dördüncü yapıcı, karma tablosunu m değeriyle başlatır. Şimdi nasıl ekleneceğini öğrenelim karma tablodaki çifti

Hashtable ht = new Hashtable (); ht.put (yeni hashCode (2), 275); ht.put (yeni hashCode (12), 250); ht.put (yeni hashCode (16), 150); ht.put (yeni hashCode (8), 200); System.out.ln (ht); / * çıkış * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Yukarıdaki kodda, Hashtable'dan boş bir nesne yarattım ve put () yöntemini kullanarak dört girdi ekledim. Put yönteminde, girdi nesnesi için indeks değeri görevi görecek hash kod değerini hesaplayan ve döndüren hashCode () olarak adlandırdım. Gördüğünüz gibi karma tablonun büyüklüğünden bahsetmedim, bu nedenle varsayılan olarak 11 olacaktır. Burada ayrıca, ekleme sırası korunmaz ve bu nedenle ed girişleri sırayla görünmediğinde beslenir.

  1. HashMap uygular harita arabirim ve soyut bir sınıfı genişletir, AbstractMap Oysa Hashtable soyut sınıfı genişletir SözlükAynı zamanda bir Legacy sınıfı olan, daha sonra uygulamak üzere yeniden yapılandırıldı. harita arayüz.
  2. HashMap nesnesi eşitlenmemiş yani, aynı anda birden fazla iplik çalışabilmektedir ve dolayısıyla iplik geçirmemeye karşı güvenlidir. Öte yandan, Hashtable’ın nesneleri senkronize yani, eğer bir iş parçacığı Hashtable nesnesinde çalışmak isterse, o nesneye bir kilit elde etmek zorundadır, böylece başka hiçbir iş parçacığı bu nesneye erişemez ve bu nedenle iş parçacığı güvenlidir.
  3. HashMap anahtarında dönebilirsiniz Sadece bir kez boş, ve değer geri dönebilir Birden çok kez boş. Öte yandan, bir anahtar, saklamak için bir dizin olarak kullanılan karma kod değerini elde etmek için kullanıldığından hiçbir zaman Null döndüremez. çift ​​ve ne de bir değer Null döndürür.
  4. HashMap sınıfındaki bir karma tablosunun varsayılan kapasitesi: 16 oysa, Hashtable'daki bir karma tablosunun varsayılan kapasitesi 11.
  5. yineleyici Hashmap girişlerini geçebilir. Öte yandan, Hashtable, tekrarlayıcıyı ve dolayısıyla genel olarak doğrudan desteklemez sayım memuru Hashtable'daki girişleri çaprazlamak için kullanılır.

benzerlikler:

  • HashMap ve Hashtable, veri yapısını kullanır. karma tablo.
  • HashMap ve Hashtable, her ikisini de uygular harita arayüz
  • Ekleme siparişi korunmadı Hem HashMap hem de Hashtable'da ve tuşları kullanılarak elde edilen karma koduna göre.
  • HashMap ve Hashtable'da, Anahtarlar benzersiz oysa, değerler olabilir çoğaltılmış.
  • HashMap ve Hashtable, her ikisini de içerebilir heterojen nesneler hem tuşlar hem de değerler için.
  • HashMap ve Hashtable, her ikisi de uygular serilestirilebilir ve kopyalanabilen arayüzler ama değil, rasgele erişim.
  • HashMap ve Hashtable, varsayılan doldurma oranına sahiptir 0.75.
  • HashMap ve Hashtable, erişim için en iyisidir. Aranıyor operasyonlar.

Sonuç:

HashMap, nesneleri senkronize edilmediğinden ve aynı anda birden çok iş parçacığı üzerinde çalışabildiğinden ve dolayısıyla Hashtable'dan daha hızlı çalıştığından performansta daha iyidir.