(n + 1) inci giriş eklendiğinde, ilk önce en eski girdinin kaldırılması, böylece hashtable'ın boyutunun her zaman n ile sınırlı olmasını sağlayacak şekilde bir sayı n belirtebileceğim bir teknik var mı?Bir java karma girişindeki giriş sayısını nasıl sınırlarım?
cevap
Sen belki LRU cache arıyoruz? İşte LinkedHashMap tabanlı bir blog yazısı.
Buraya bir LRU önbelleği için son zamanlarda kullandığım LinkedHashMap'den bahsetmeye geldim. –
Apache Koleksiyonlarını kullanmayı düşünebilirsiniz. Bir grup LRU uygulaması var. Aksi takdirde, standart kütüphane koleksiyonları için benzer bir sarıcı kolayca yazabilirsiniz; Doğrudan kullanabileceğinizi düşünmüyorum. Eğer maksimum sayımda olduğunuzda
veya Deque ve sadece ilk öğeyi kaldırın.
Eğer bir WeakHashMap veya WeakReference kullanabilirsiniz önbelleğe ve sonra önbellek boyutu hakkında endişelenmenize gerek ediyorsanız.
Sadece genel bir yanlış anlamadan kaçınmak için açıklığa kavuşturmak için: WeakHashMap, kendi başına LRU önbelleğe alma için uygun DEĞİLDİR; DEĞERLER için değil, KEYS için WeakReferences kullanır. Size ait olmayan nesneler hakkında meta verileri tutmak için idealdir; bellek bittiğinde girişler atılacak değil – Cowan
LinkedHashMap tam olarak, removeEldestEntry yöntemi için javadoc bakınız yapar.
Map map = new LinkedHashMap(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
Eğer:
Map map = new LinkedHashMap() {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
Ayrıca yapıcı bunu belirterek eski erişilen girişi kaldırabilirsiniz: Böyle
şey hile yapmak gerekir, bu en eski eklenen girdiyi kaldıracaktır eşzamanlılık ihtiyaçları var, bu sorunu kendiniz çözmeye çalışmayın. Guava'nın CacheBuilder, bir haritanın büyüklüğünü sınırlamanıza izin veren bir .maximumSize() yöntemine sahiptir, ancak eski girdilerin gerçekten sınıra ulaşmadan önce temizlenebildiğini anladım.
an interesting page Google'ın uygulanması daha iyi yapmak ne kadar zor olacağını okuyucuda etkilemek gerektiğini veri yapının tasarımı, üzerinde var. :)
- 1. İskelenin kabul edeceği bağlantı sayısını nasıl sınırlarım?
- 2. Sinema ile girilen karakter sayısını nasıl sınırlarım?
- 3. Grep'ten döndürülen sonuç sayısını nasıl sınırlarım?
- 4. Interbase 7.1 için döndürülen kayıt sayısını nasıl sınırlarım?
- 5. SQL'de alan değeri başına satır sayısını nasıl sınırlarım? Örneğin
- 6. Sınırlarım hizalanmadı mı?
- 7. HTML5 aralık girişindeki yön nasıl tersine çevrilir?
- 8. nasıl başarılı bir giriş GWT Java
- 9. Matplotlib grafiğindeki kenarlık boyutunu nasıl sınırlarım?
- 10. Java cari aydaki gün sayısını al
- 11. Java konularına giriş
- 12. Bir kafes grafiğinde panel sayısını kontrol etme R
- 13. Bir karma tablosu nasıl oluşturulur
- 14. java kullanarak bir web sitesine giriş yapmak
- 15. Bir karma görev içinde karma görevini nasıl çalıştırırım?
- 16. java 7 ve 8 karma haritasındaki farklar
- 17. Java sınıfları Giriş sınıfından nasıl bilgi alır?
- 18. svn + ssh girişindeki kullanıcı adı olarak e-posta adresi?
- 19. Bir RDD'deki satır sayısını sayın
- 20. Boru veya Takas Giriş/Java
- 21. Java: ArraryList, aynı örnek değişkenine sahip elemanların sayısını nasıl sayılır?
- 22. htmlunit java değiştir giriş metni
- 23. Web sayfasında varolan satırların sayısını java kullanarak nasıl girebilirsiniz?
- 24. SQL Bigint karma karma
- 25. Dolgu karma haritası
- 26. Karma
- 27. Java, MIDI klavyeden giriş alıyor
- 28. karma
- 29. Karma değerler nasıl değiştirilir?
- 30. Çocuk sayısını nasıl sayabilirim?
Bu http://stackoverflow.com/questions/272674/what-is-a-data-structure-kind-of-like-a-hash-table-but-infrequently-used-keys benzer -ar. Soru bir çözüm sağlar. –
@robhruska - bunun bir kopya olarak sayıldığını düşünüyor musunuz? Ben çitdeyim. –
Emin değilim. Perspektifler biraz farklıdır, çünkü bu soru “boyut sınırı” hakkında sorgularken, diğer soru “seyrek olarak kullanılan” girdileri hedeflemektedir. Açık bırakmaya karşı değilim, sadece eğer bu sorunun bakış açısına bakanlar için daha fazla arama yapılabilir. –