Ben bir Java listesinde, set veya girdileri belirli bir zaman diliminde sonra sona sahiptir benzer bir şey arıyordum ettik ama bulmak için henüz. Guava'nın, kullanımım için neredeyse mükemmel olan CacheBuilder
'u buldum, ancak bir Liste veya Set yerine bir harita. Böyle bir şey zaten var mı, yoksa onu kullanmak istersem, bir tane yapmalı mıyım? Java HashSet uygulaması dahili bir HashMap kullandığındanJava zaman aşımına uğradı Liste/Ayar?
cevap
, kopyalama/o guavaları CacheBuilder kullanması için kodunu değiştirmek gerçekten kolay olmalıdır. Başka bir deyişle
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
...
, sadece planlarınız
SetWithExpiration
anahtarına anahtarından bir
CacheBuilder
harita olarak. Bu, bir
HashMap
temel alınarak Java
HashSet
uygulama kaybından daha fazla verimlilik kaybetmez.
Çok kolay değil. Yeniden icat 'HashSet' sınıfını kötü bir fikir olduğunu ve sadece – Bohemian
evet "HashSet yerine CacheBuilder kullanmak yapmak" olamaz, temiz kod çözümü AbstractSet uzatmak ve içten Bağımlılığı enjeksiyon yoluyla iletilen bir harita kullanmak olacaktır . –
Eğer tuşları olarak harita ve değerler olarak bazı kukla nesnede nesnelerinizi koyabilirsiniz, bir zaman listesini doldu almak için CacheBuilder
kullanın.
Veya nesnelerinizi anahtar ve değer olarak kullanın. Her bir kukla için yeni bir nesne yaratmamaya dikkat edin, çünkü bu atık olur. –
Kullanım durumunuz nedir? – Bohemian
Ben de kullanım durumu görmek zor bir zaman geçiriyorum. Genellikle, önbelleğe almak istediğinizde, önbelleğe alınan şeyleri geri almak için bir anahtara ihtiyacınız vardır, bu nedenle her önbellek uygulaması, Harita arabirimiyle (veya benzer bir şeyle) neden çalışır? – Matt
Hala Kullanıcıların konuşmak chatroomda bir anti-repeat mesaj eklentisi yapıyorum Set –