HashSet, HashMap kullanılarak uygulanır ve e1'den HashSet'e bir şey eklediğimizde, dahili olarak e1, sette yoksa, HashMap'e (e1, yeni Object()) ekler. Benim sorum, yeni Nesnelerin oluşturulmadığından daha iyi bir yaklaşım olan (e1, null) gibi eklendikleri zaman yeni Object() ekledikleridir. Burada nulllar eklemek için herhangi bir olumsuzluk var mı?HashSet'in iç uygulaması neden sıfırları eklemek yerine HashMap'e değer olarak eklenecek kukla nesneler oluşturur?
cevap
A HashSet
, yeni bir anahtar put
her seferinde yeni bir Object
eklemez. Bir Object
kullanıyor, ancak her seferinde aynı Object
kullanıyor. Bu değer HashSet
kaynak kodunda PRESENT
olarak adlandırılmıştır.
add
yöntemi, HashMap
numaralı telefondan put(key, PRESENT)
numaralarını çağırır. remove
yöntemi, iç HashMap
üzerinde remove(key)
numaralı telefonu çağırır, ancak anahtarın mevcut olup olmadığını belirten bir boolean
döndürmelidir. null
değer olarak kaydedildiyse, HashSet
anahtarın mevcut olup olmadığını belirlemek için önce containsKey
, ardından remove
numaralı telefonu arayacak - ek ek yük. Burada, sadece Object
bir bellek yükü vardır, ki bu oldukça azdır.
E.g. Bir HashSet nesnesini ConcurrentSkipListSet yapıcısına verirseniz, boş değer içeremez.
Sadece sourcecode baktı ve bu kodu
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
null
PRESENT
yerine kullanıldıysa Bunlar işe yaramaz gördük; Her durumda, fazladan bir adım gerekli olacaktır.
- 1. LinqPad neden Özellikler yerine Alanlar oluşturur?
- 2. Neden Object.defineProperty() bunun yerine this.defineProperty() (nesneler için)?
- 3. Yeni nesneler eklemek için
- 4. Garip, IEnumerable.ToList() oluşturur tamamen yeni nesneler
- 5. Değer ben nesneler dizisi varsa
- 6. İç içe geçmiş nesneler ve oluşturucular
- 7. AWS/EB - iç kukla bağlantısı ile vuruldu
- 8. İç içe nesneler Tepki-Yerli
- 9. Kukla 2.7: Kukla aranması init.pp hiçbir şey yapmıyor - neden?
- 10. Dapper ORM İç içe geçmiş nesneler
- 11. Python Pandalar orijinal dataframe için kukla sütunlar eklemek
- 12. AppendAttributedString neden yeni bir satıra eklenecek?
- 13. Kukla ve Şef Ruby'yi neden kullanıyor?
- 14. Anahtar iç içe yerleştirilmiş alt nesneler
- 15. bir nesne iç nesneler/özelliği yineleme nasıl
- 16. Neden ayırma işlevleri std :: nothrow_t değerini değer yerine değil alır?
- 17. ActionScript: Nesne adına değer eklemek?
- 18. Neden _mm256_load_pd, MOVAPD yerine MOVUPD olarak derlendi?
- 19. Nesneler olarak diziler
- 20. android- Veritabanı alanı için nesneler eklemek ve silmek nasıl?
- 21. SQL: Seçme ifadesinde kukla bir sütun eklemek mümkün mü?
- 22. İç içe geçmiş nesneler aracılığıyla yineleme JS
- 23. Moğol şemasında iç içe geçmiş nesneler
- 24. Bu çift değer neden "-0" olarak yazdırıldı?
- 25. Client.get() değeri, gerçek değer yerine
- 26. Neden Varsayılan Değer Sağladığımda Bağımlılık Özellik Uygulaması Uygulamamı Çöküyor?
- 27. Bir metne nasıl metin eklenir? Yerine bir metin eklemek yerine
- 28. Neden LINQ'taki Skip() nesneler için optimize edilmiş?
- 29. Interlocked.Add() yöntemi neden bir değer döndürmek zorunda?
- 30. Dizimdeki diğer tüm nesneler neden boş?
Yeni nesne eklemez. Bu sette bir değerin varlığının bir göstergesi olarak kullanılan tek bir tane ekler. Kaynak kodunu oku. –
Java 8'de, özel statik final olarak değiştirdiler. Object PRESENT = new Object(); , bu değerdir. – Sandeep
hiçbir performans isabeti yok çünkü nesne statik bir sonuçtur ve bu yüzden sadece sabittir ve – Prashant