HashMap ve Hashtable Arasındaki Fark

Java Koleksiyonlar çerçevesi bir dizi koleksiyon sınıfı sağlar. Her sınıfın kendi performans güçlü ve zayıf yönleri vardır. Bazı sınıflar olduğu gibi kullanılabilecek tam uygulamalar sağlar. Diğerleri, koleksiyon oluşturmak için başlangıç ​​noktası olarak kullanılan iskelet uygulamaları sağlayan soyuttur. Koleksiyon uygulamaları, senkronize sınıflar sağlamak için senkronize-sarmalayıcı çerçevesini kullanır, aksi takdirde uygulamalar senkronize edilmez. Bazı sınıflar harita arayüzünün uygulamalarını sağlar.

Java platformu üç genel amaçlı Harita uygulaması içerir: HashMap, TreeMap ve LinkedHashMap. HashMap ve Hashtable, Java'da anahtar / değer çiftlerini bir karma tablosunda depolamak için kullanılan iki koleksiyondur. Hashtable senkronize edilmiş bir Harita ve HashMap senkronize olmayan bir Haritadır. Bununla birlikte, senkronize edilmiş bir Harita kullanmanız gerekiyorsa, Hashtable senkronize edilmiş bir sarmalayıcıda HashMap kullanmaktan daha hızlıdır. Her ikisi de Java'da karma tabanlı koleksiyonlardır, ancak farklarından adil pay alırlar. Terimleri daha iyi anlamanıza yardımcı olmak için ikisi arasındaki bazı önemli farklılıkları vurgularız.

HashMap nedir?

HashMap, çift ekleme ve bulma için sabit zamanlı performans sağlayan bir karma tabloya dayalı bir Harita uygulamasıdır. HashMap sınıfı, Hashtable veri yapısına dayanan bir harita uygulaması sağlar. Bu uygulama tüm Harita işlemlerini destekler ve birden fazla boş değere izin verir, ancak yalnızca bir boş anahtar sağlar. Değerleri bir karma tablosunda saklamak için anahtar / değer çiftlerini kullanır. Senkronize edilmemiş bir Haritadır, yani iş parçacığı için güvenli değildir ve uygun senkronizasyon olmadan birden fazla iş parçacığı arasında paylaşılamaz.

Hashtable nedir?

HashMap'in aksine, Hashtable senkronize edilmiş bir Haritadır ve iş parçacığı için güvenlidir, bu da birden çok iş parçacığı arasında paylaşılabileceği anlamına gelir. Hashtable'da, anahtar olarak kullanılabilecek bir nesneyi ve anahtarla birlikte giden değeri belirtirsiniz. Hashtable, bir hash fonksiyonu yardımıyla tuşları değerlerle eşler. Java bu işlevi, uygun karma kodları sağlamak için sınıfların geçersiz kıldığı Object hashcode () yöntemi biçiminde sağlar. HashMap'ten farklı olarak Hashtable, null değerleri ve null anahtarları desteklemez, çünkü Hashtable'ın put yöntemi uygulamasında null kontrol vardır.

HashMap ve Hashtable arasındaki fark

  1. HashMap Vs.'in Temelleri hashtable'a

Her ikisi de Java'daki anahtar / değer çiftlerinde veri depolamak için kullanılan karma tabanlı koleksiyonlardır. HashMap, çift ekleme ve bulma için sabit zamanlı performans sağlayan bir karma tabloya dayalı bir Harita uygulamasıdır. Performans, karma tablonun kapasitesini ve yük faktörünü ayarlamanıza izin veren yapıcılar kullanılarak ayarlanabilir. Temel Hashtable, yöntem adlarında bile HashMap'e oldukça benzer. Anahtar / değer çiftini karma tablosunda saklar. Hashtable'da, anahtar olarak kullanılabilecek bir nesneyi ve anahtarla birlikte giden değeri belirtirsiniz.

  1. HashMap Vs.'nin senkronizasyonu hashtable'a

Hem HashMap hem de Hashtable, değerleri anahtara göre saklamak için hashing tekniklerini kullanır. HashMap gibi, Hashtable da değerleri bir karma tablosunda saklamak için anahtar / değer çiftlerini kullanır. Bununla birlikte, ikisi arasındaki temel fark senkronizasyondur. HashMap senkronize edilmemiş bir Harita iken Hashtable senkronize edilmiş bir Haritadır. Bu, HashMap'in iş parçacığı için güvenli olmadığı ve uygun eşitleme kodu olmadan birden çok iş parçacığı arasında paylaşılamayacağı anlamına gelir. Aksine, Hashtable iş parçacığı için güvenlidir ve birden çok iş parçacığı arasında paylaşılabilir. Eşzamanlı bir Harita kullanmanız gerekiyorsa, Hashtable, senkronize edilmiş bir sarmalayıcıda HashMap kullanmaktan daha hızlıdır.

  1. Boş Tuşlar ve HashMap Vs. için Boş Değerler hashtable'a

HashMap sınıfı, Hashtable veri yapısına dayanan bir harita uygulaması sağlar. Bu uygulama, tüm Harita işlemlerini destekler ve benzersiz anahtar özelliklerini koruyabilmesi için birden fazla boş değere ancak yalnızca bir boş değere izin verir. Ancak, girdilerin saklanma sırası konusunda hiçbir garanti vermez. Hashtable ise anahtarları bir hash fonksiyonu yardımıyla değerlerle eşler. HashMap'ten farklı olarak Hashtable, null değerleri ve null anahtarları desteklemez, çünkü Hashtable'ın put yöntemi uygulamasında null kontrol vardır.

  1. HashMap Vs.'nin Performansı hashtable'a

HashMap senkronize bir Harita olmadığından, performans açısından Hashtable'dan çok daha hızlı ve daha iyidir ve aslında Hashtable'dan daha az bellek kullanır. Hemen hemen aynı olmalarına rağmen, Hashtable bir HashMap'ten biraz daha yavaş ancak senkronize edilmiş bir HashMap'ten daha hızlıdır. Doğal olarak, Hashtable'ı çok iş parçacıklı erişimle kullanmak güvenli değildir, çünkü yalnızca yöntemler senkronize edilir. Hashtable, HashMap'in senkronize karşılığıdır. Senkronize olmayan nesneler, Hashtable'ın tek bir iş parçacıklı ortamda daha iyi performans göstermesi gibi, senkronize edilmiş nesnelere kıyasla daha iyi performans gösterir.

HashMap ve Hashtable Karşılaştırması: Karşılaştırma Tablosu

 

HashMap Vs. Özeti hashtable'a

HashMap sınıfı size sıralanmamış, sırasız bir Harita verir. Bir Haritaya ihtiyacınız olduğunda ve girişlerin saklanma sırasını umursamadığınızda, HashMap gitmenin yoludur.

Hashtable, tıpkı Vector gibi, tarih öncesi Java zamanlarından gelmiştir. Vector, daha modern ve gelişmiş ArrayList ile senkronize bir muadil gibi, Hashtable da HashMap ile senkronize edilmiş bir muadildir. Ancak, bir sınıf senkronize edilemez, bu nedenle Hashtable'ın senkronize edilmiş bir Harita olduğunu söylediğimizde, sınıfın anahtar yöntemlerinin senkronize olduğu anlamına gelir. 

Her ikisi de neredeyse aynı olsa da, fark senkronize edilme şekilleri ve performanslarıdır. HashMap çok iş parçacıklı bir ortamda daha iyi performans gösterirken Hashtable tek iş parçacıklı bir ortamda daha iyi performans gösterir.