Aslında dışında HashSet
yinelenen değerleri izin vermez, arasındaki fark nedir HashMap
ve HashSet
?
Yani uygulama akıllıca mı? Her ikisi de değerleri saklamak için karma tabloları kullandığından biraz belirsiz .
Aslında dışında HashSet
yinelenen değerleri izin vermez, arasındaki fark nedir HashMap
ve HashSet
?
Yani uygulama akıllıca mı? Her ikisi de değerleri saklamak için karma tabloları kullandığından biraz belirsiz .
Yanıtlar:
Bunlar tamamen farklı yapılardır. A HashMap
, bir uygulamasıdır Map
. A Harita değerlerine anahtarlarını eşler. Anahtar arama karma kullanılarak yapılır.
Öte yandan, a HashSet
bir uygulamasıdır Set
. Bir Seti kümesinin matematiksel bir model eşleştirmek için tasarlanmıştır. A HashSet
, HashMap
belirttiğiniz gibi, uygulamasını desteklemek için a kullanır . Ancak, tamamen farklı bir arayüz uygular.
Amacınız için en iyi olanı arıyorsanız Collection
, bu Eğitici iyi bir başlangıç yeridir. Eğer gerçekten neler olduğunu bilmek istiyorsanız, bunun için de bir kitap var .
HashSet bir olan dizi , örneğin {1,2,3,4,5}
HashMap bir anahtar -> değer ( değerin anahtarı) haritasıdır, örneğin {a -> 1, b -> 2, c -> 2, d -> 1}
Yukarıdaki örneğimde, HashMap'te yinelenen anahtarların olmaması gerektiğine, ancak yinelenen değerlere sahip olabileceğine dikkat edin.
HashSet'te, yinelenen öğe olmamalıdır.
HashSet senkronize edilmediğinden, açıkça senkronize olmadıkça iş parçacığı için güvenli işlemler için uygun olmadıkları anlamına gelir. [Benzerlik]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap senkronize edilmez, yani açıkça senkronize olmadıkça iş parçacığı için güvenli işlemler için uygun olmadıkları anlamına gelir. [Benzerlik]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
Daha fazla bilgi için lütfen bu makaleye bakın .
Her iki isminin de Hash ile başlaması gerçekten utanç verici . Bu onların en az önemli kısmı. Önemli parçaları sonra gelen Hash - Set ve Harita Diğerleri işaret olarak. Sırasıyla, bir Set - sırasız bir koleksiyon - ve bir Harita - anahtar erişimli bir koleksiyon. Karmalarla birlikte gerçekleşiyorlar - isimlerin geldiği yer bu - ama özleri isimlerinin o kısmının arkasında gizleniyor.
İsimleriyle karıştırmayın; onlar çok farklı şeyler.
Hashset
Dahili olarak uygular HashMap
. Dahili uygulamayı görürseniz HashSet'e eklenen değerler HashMap'te anahtar olarak saklanır ve değer Object sınıfının bir Dummy nesnesidir.
HashMap vs HashSet arasındaki fark: -
HashMap
anahtar / değer çiftlerini içerir ve her değere anahtarla erişilebilir; burada HashSet, get yöntemi olmadığı için her seferinde yinelenmelidir.HashMap
Harita arabirimini uygular ve anahtar olarak bir null değere ve değer olarak birden çok null değere HashSet
izin verir. HashSet, HashMap'i dahili olarak uygular). HashSet
ve HashMap
yineleme sırasında ekleme sırasını korumaz.İsimleri ima olarak, bir HashMap bir ilişkisel olan Harita a, (bir değere anahtarından haritalama) HashSet sadece olduğunu belirle .
Java'da HashSet ve HashMap arasındaki farklar
1) HashMap ve HashSet arasındaki ilk ve en önemli fark, HashMap'ın Harita arayüzünün bir uygulaması olması, HashSet ise Set arayüzünün bir uygulamasıdır, yani HashMap anahtar değere dayalı bir veri yapısıdır ve HashSet, kopyalara izin vermeyerek benzersizliği garanti eder. gerçeklik HashSet, Java'da HashMap etrafında bir sarıcıdır, HashSet.java'nın add (E e) yönteminin koduna bakarsanız aşağıdaki kodu göreceksiniz:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
burada nesnenin anahtar ve değer olarak haritaya konulması, kukla olan son bir nesildir.
2) HashMap ve HashSet arasındaki ikinci fark, öğeleri Set içine koymak için add () yöntemini kullanmak, ancak Java'da HashMap'e anahtar ve değer eklemek için put () yöntemini kullanmaktır.
3) HashSet yalnızca bir null anahtara izin verir, ancak HashMap bir null anahtara + birden fazla null değere izin verebilir.
Tüm bunlar Java'daki HashSet ve HashMap arasındaki farktır. Özetle HashSet ve HashMap biri biri diğeri Harita olmak üzere iki farklı Koleksiyon tipidir.
Java'da HashSet ve HashMap arasındaki farklar
HashSet, objects.when add (String) yöntemini çağırdığında HMHMM put (key, value) yöntemini çağırdığı durumlarda HashMap'i dahili olarak kullanır. Burada key = String object & value = new Object (Dummy). Nesne.
Hashset / HashMap içinde anahtar olarak saklanan Nesneler, hashcode & eşittir sözleşmesini geçersiz kılmalıdır.
HashMap'te değer nesnelerine erişmek / depolamak için kullanılan anahtarlar, değiştirildiği zaman Value nesnesi bulunamıyor ve null değerini döndürdüğü için Son olarak bildirilmelidir.
A HashMap
, herhangi bir türden özel bir anahtarla dizine eklenmiş nesneleri almak, kaldırmak, kaldırmaktır.
A HashSet
eleman eklemek, eleman çıkarmak ve elemanların karmasını karşılaştırarak var olup olmadığını kontrol etmektir.
Yani bir HashMap öğeleri içerir ve bir HashSet kendi karmalarını hatırlar.
equals()
yöntemlerini çağırarak .
Farklılıklar: heirarchy açısından: HashSet Set uygular. HashMap Harita'yı uygular ve anahtarların ve değerlerin bir eşlemesini saklar.
Veritabanı ile ilgili HashSet ve HashMap kullanımı, her birinin önemini anlamanıza yardımcı olacaktır.
HashSet: genellikle benzersiz toplama nesnelerini saklamak için kullanılır. Örneğin:
Sınıf Öğesi ve Sınıf Teklifi
arasında birden fazla bire bir ilişki gemisi depolamak için uygulama sınıfı olarak kullanılabilir; burada (Öğenin birçok Teklifi vardır) HashMap: bir anahtarı değere eşlemek için kullanılır. Değer null veya herhangi bir Nesne olabilir / nesnenin listesi (kendi içinde nesne).
Bir HashSap , bir HashMap açısından uygulanır . Bu anahtar ve bir PRESENT nesnesi arasında bir eşleme.
HashSet, girdilerini depolamak için dahili olarak bir HashMap kullanır. Dahili HashMap'teki her giriş tek bir Nesne tarafından anahtarlanır, böylece tüm girişler aynı grupta toplanır. Dahili HashMap'in değerlerini saklamak için ne kullandığını hatırlamıyorum, ancak bu dahili kap asla yinelenen değerler içermeyeceği için gerçekten önemli değil.
DÜZENLEME : Matthew'nin yorumuna hitap etmek için haklı; Geri aldım. Dahili HashMap, Set öğelerini oluşturan Nesneler ile anahtarlanır . HashMap değerleri, sadece HashMap bölümlerinde saklanan bir Nesnedir.
HashMap
yinelenen değerlereMap
izin veren ancak yinelenen anahtarlara izin vermeyen bir uygulamadır . . Bir nesne eklemek için bir Anahtar / Değer çifti gereklidir. Null Tuşlar ve Null değerlere izin verilir. Örneğin:
{The-> 3, dünya> 5, IS-> 2, güzel-> 4}
HashSet
Yinelenenlere izinSet
vermeyen bir uygulamadır . Yinelenen bir nesne, yönteme çağrı eklemeyi denediyseniz , küme değişmeden kalır ve geri döner . Örneğin:public boolean add(Object o)
false
[, Dünya, güzel,]
kendi sorunuzu hemen hemen cevapladınız - hashset yinelenen değerlere izin vermiyor. destek hashmap'i (ve değerin zaten var olup olmadığını görmek için bir kontrol) kullanarak bir karma kümesi oluşturmak önemsiz olacaktır. çeşitli java uygulamaları ya bunu yapmak ya da daha verimli yapmak için bazı özel kod uygulamak sanırım.
java.util.HashSet
bunun a tarafından desteklendiğini söylüyor java.util.HashMap
.
Temelde HashMap'te, kullanıcı hem Anahtar hem de Değer sağlamalıdır, oysa HashSet'te yalnızca Değer sağlarsanız, Anahtar hash işlevini kullanarak otomatik olarak Değer'den türetilir. Bu nedenle, hem Key hem de Value'e sahip olduktan sonra, HashSet dahili olarak HashMap olarak saklanabilir.
HashSet ve HashMap her iki depo çiftinde, fark HashMap'te bir anahtar belirtebildiğinizde, HashSet'te anahtar nesnenin hash kodundan gelir.
HashMaps
bir null anahtar ve null değerine izin ver. Senkronize edilmezler, bu da verimliliği artırır. Gerekirse, bunları kullanarak senkronize edebilirsiniz.Collections.SynchronizedMap()
Hashtables
null anahtarlara izin verme ve senkronize etme.
HashMap Harita arabiriminin bir uygulamasıdır HashSet Set Arabiriminin bir uygulamasıdır
HashMap Verileri anahtar değer çifti biçiminde depolar HashSet Yalnızca nesneleri depolar
Haritaya öğe eklemek için koyma yöntemi kullanılır.
Karma eşlemede karma kod değeri anahtar nesne kullanılarak hesaplanır Burada üye nesne, iki nesne için aynı olabilecek karma kod değerini hesaplamak için kullanılır; bu nedenle, iki nesnenin farklı olduğu anlamına gelen yanlış döndürürse eşitliği kontrol etmek için equal () yöntemi kullanılır.
HashMap, hashsetten daha hızlıdır çünkü nesneye erişmek için benzersiz anahtar kullanılır HashSet, Hashmap'den daha yavaştır