Java'da HashMap ve HashTable Arasındaki Farklar
Yayınlanan: 2021-06-02Java ve uygulamalarını öğreniyorsanız, HashMap ve HashTable ile karşılaşmış olmalısınız. Her ikisi de Java Collection çerçevesindeki en önemli sınıflar arasındadır. Java ile geliştirirken bunları yoğun bir şekilde kullanacaksınız, bu nedenle farklılıklarını anlamak hayati önem taşımaktadır.
Aşağıdaki noktalarda HashTable ve HashMap konusunu ayrıntılı olarak ele alacağız ve ikisi arasındaki farkları açıklayacağız:
İçindekiler
HashMap nedir?
HashMap, Java 1.2'nin piyasaya sürülmesinden bu yana Java'nın koleksiyonunda yer almaktadır. Java'nın Harita arayüzünün temel uygulamalarını gerçekleştirmenize izin verir. HashMap, verileri (Anahtar, Değer) çiftlerinde depolar ve bunlara erişmek için tamsayı gibi başka bir türde bir dizin kullanmanız gerekir.
Burada, bir nesneyi başka bir nesne (değer) için anahtar (indeks) olarak kullanırsınız, dolayısıyla (anahtar, değer) çifti kullanılır. Yinelenen bir anahtar eklerseniz, karşılık gelen anahtarın öğesinin yerini alır.
HashMap'in Özellikleri
HashTable ve HashMap arasındaki farkları anlamak için önce özelliklerini anlamalısınız. Her ikisinin de temellerine aşina olmanızı sağlar. HashMap aşağıdaki özelliklere sahiptir:
- Java.util paketinin bir parçasıdır.
- Harita arabiriminin eksik bir uygulamasını sağlayan soyut bir sınıf olan AbstractMap'i genişletir.
- Harita arayüzünü uygulamanın yanı sıra Serileştirilebilir ve Klonlanabilir arayüzleri de uygular.
- Yinelenen değerlere izin verir, ancak yinelenen anahtarlara izin vermez. Bu, bir anahtarın birden fazla değere sahip olamayacağı, ancak birden çok anahtarın tek bir değeri olabileceği anlamına gelir.
- Boş anahtarı bir HashMap'te yalnızca bir kez kullanabilirsiniz, ancak birden çok boş değer kullanabilirsiniz.
- Haritanın sırası hakkında, özellikle sıranın zaman içinde sabit kalacağı konusunda hiçbir garanti vermez. HashMap, HashTable'a neredeyse benzer ancak senkronize değil.
- HashSet, HashMap'i dahili olarak kullanır.
HashTable nedir?
Anahtarları değerlerle eşleyen bir karma tablo uygulamak için HashTable sınıfını kullanırsınız. Burada null olmayan nesneleri anahtar veya değer olarak kullanabilirsiniz. Bir hashtable'dan nesneleri başarıyla depolamak ve almak için, anahtar olarak kullandığınız nesnelerin hashCode yöntemini ve equals yöntemini uygulaması gerektiğini unutmayın.
Bir karma tablo, verileri bir dizi biçiminde depolar ve her veri değerinin benzersiz bir dizin değeri vardır. Bu, gerekli dizini biliyorsanız, belirli verilere oldukça hızlı bir şekilde erişmenizi sağlar.
HashTable'ın Özellikleri
HashTable, tıpkı HashMap gibi kendine has özelliklere sahiptir. Bununla birlikte, bu özellikler onu birçok açıdan HashMap'ten benzersiz ve farklı kılmaktadır:
- HashTable, HashMap'e oldukça benzer ancak senkronizedir.
- Anahtar/değer çiftlerini bir karma tablosunda saklar.
- Burada, anahtar olarak kullanılan bir nesneyi ve bununla ilişkilendirmek istediğiniz değeri belirtirsiniz. Ardından anahtarı hash eder ve oluşturulan hash kodunu, değeri tablo içinde sakladığınız dizin olarak kullanırsınız.
- Hashtable sınıfının varsayılan kapasitesi 11'dir ve yük faktörü 0,75'tir.
- HashMap Numaralandırma sunmaz, Hashtable ise hızlı Numaralandırma sunmaz.
HashMap ve HashTable Arasındaki Farklar
Artık HashMap ve HashTable'ın öne çıkan özelliklerini bildiğinize göre, şimdi bunları karşılaştıracağız ve ikisi arasındaki belirgin farkları göreceğiz:
HashMap | HashTable |
Senkronize değil. İş parçacığı için güvenli olmadığı için uygun senkronizasyon kodunu kullanmadan burada birçok iş parçacığı paylaşamazsınız. | Senkronize edilmiştir. İş parçacığı güvenli olduğu için birçok iş parçacığı ile paylaşabilirsiniz. |
AbstractMap sınıfını devralır. | Dictionary sınıfını devralır. |
Burada, Yineleyici düşme hızındadır. | HashTable'da Numaralandırıcı düşme hızında değildir. |
Yineleyici, HashMap'ten geçer. | Numaralandırıcı ve Yineleyici, HashTable'ı geçer. |
Kodu arayarak bir HashMap'i senkronize edebilirsiniz. Harita m = Collections.synchronizedMap(hashMap); | Hash Tabloları dahili olarak senkronize edilir ve onları herhangi bir kodla senkronize edemezsiniz. |
Oldukça hızlı. | HashMap'ten nispeten daha yavaştır. |
HashMap yeni bir sınıftır ve yakın zamanda JDK 1.2'de tanıtılmıştır. | HashTable eski bir sınıftır. |
Birden çok boş değere ve bir boş anahtara izin verir. | Herhangi bir boş değere veya anahtara izin vermez. |
Kodlama Örneği
HashMap ve HashTable arasındaki farkları anlayabilmeniz için işte bir HashMap ve HashTable örneği aşağıdadır.
Giriş:
java.util.* dosyasını içe aktarın;
java.lang.* dosyasını içe aktarın;
java.io'yu içe aktar*;
genel sınıf JavaTester{
public static void main(String args[]){
Hashtable ht=new Hashtable();
ht.put(1”Uday”);
ht.put(1”Ujjwal”);
ht.put(2”Zirve”);
ht.put(3”Vijay”);
System.out.println(“————-Hash tablosu————–“);
Set<Tamsayı> keySet = ht.keySet();
for (Tamsayı anahtarı:keySet) {
System.out.println(anahtar + ” “+ht.get(anahtar));
}
HashMap hm=yeni HashMap();
hm.put(0,”Uday”);
hm.put(4”Uday”); // bir hashmap'te yinelenen değerlere sahip olabilirsiniz
hm.put(1”Zirve”);
hm.put(2”Vijay”);
System.out.println(“———–Hash haritası———–“);
Set<Tamsayı> keySet1 = ht.keySet();
for (Tamsayı anahtarı:keySet) {
System.out.println(anahtar + ” “+hm.get(anahtar));
}
}
}
Çıktı:
Hash tablosu:
3 Vijay
2 Zirve
1 Ujjwal
Karma haritası:
0 gün
1 Zirve
2 Vijay
4 gün
HashMap ve HashTable ne zaman kullanılır?
HashMap'i mi yoksa HashTable'ı mı kullanacağınızı belirleyen birincil faktör senkronizasyondur. İş parçacığı güvenli bir göreve ihtiyacınız varsa, tüm yöntemleri senkronize edildiğinden HashTable'ı kullanmalısınız. Ancak, eski bir sınıftır ve onlardan kaçınmalısınız.
Çok iş parçacıklı bir ortamınız varsa, HashTable'a oldukça benzer olduğu için ConcurrentHashMap kullanmalısınız. HashMap'i düzgün bir şekilde senkronize etmenizi sağlar.
Senkronize işlemler düşük performansa neden olur, bu nedenle çoğu durumda bunlardan kaçınmalısınız. Üstelik HashMap iş parçacığı olmayan bir ortam için uygundur, bu nedenle kolayca kullanabilirsiniz.
Dünyanın En İyi Üniversitelerinden Online Yazılım Kursları Öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.
Çözüm
HashMap ve HashTable, benzer işlevlere sahip popüler Java kodlarıdır. Ancak, gördüğünüz gibi, ikisi arasında birkaç belirgin fark var. HashMap bir Java sınıfıdır, HashTable ise bir veri yapısıdır.
Java ve diğer programlama dilleri hakkında daha fazla bilgi edinmek istiyorsanız , Tam Yığın Geliştirmede Uzmanlık ile Yazılım Geliştirmede Yönetici PG Programımızı kontrol etmenizi öneririz .
Hash tablosu nedir?
Hash tablosu, bilgisayar programcılığında yaygın olarak kullanılan bir kapsayıcı veri yapısıdır. Hash tabloları, anahtarın herhangi bir nesne olabileceği anahtar/değer çiftlerini tutmak için kullanılır. Bir kapsayıcı olarak, bir karma tablo ekleme ve çıkarma işlemlerini desteklemelidir. Bir arama aracı olarak, bir hash tablosu get'in çalışmasını desteklemelidir. Bir karma tablonun bir sözlük veri yapısı olması gerekiyorsa, içerme işlemini de desteklemesi gerekir. Bu nedenle, genel olarak, bir karma tablo, ekleme, kaldırma, alma ve içerme işlemlerini etkin bir şekilde uygulamak için yaygın olarak kullanılan bir veri yapısıdır. Hash tablosu, hızlı performansı nedeniyle yaygın olarak kullanılmaktadır.
Java'da koleksiyon çerçevesi nedir?
Java Collections Framework, Java Platformu için bir dizi arabirim, sınıf ve algoritmadır. 1.2 sürümünden beri Java Platformunun bir parçası olmuştur. Kapsayıcılar, listeler, kuyruklar vb. için arabirimler içerir, ancak aynı zamanda tarih ve saatleri işlemek için sınıfları, normal ifadeleri işlemek için bir sınıf, uluslararasılaştırmayı işlemek için bir sınıf ve dosyalar arasında arama yapmak için başka bir sınıf içerir.
Java'da bir hashtable ve hashmap arasındaki ilişki nedir?
Hashtable, anahtarları değerlerle ilişkilendiren özel bir veri yapısıdır. Anahtarlar herhangi bir nesne olabilir, ancak belirli bir özet tablosundaki tüm anahtarlar birbiriyle karşılaştırılabilir olmalıdır (yani, aynı veya uyumlu arabirimleri kullanın). Java'da harita, bir TreeMap kullanılarak uygulanan belirli bir karma tablo türüdür. Bir haritadaki anahtarlar, eşittir yöntemini uygulamalıdır ve harita, iki anahtarın eşit olup olmadığını belirlemek için bu yöntemi kullanır. Bu, haritada yalnızca anahtarların depolandığı ve gerektiğinde ilgili değerlerinin hesaplandığı anlamına gelir.