2012-07-23 19 views
11

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?

+2

Kullanım durumunuz nedir? – Bohemian

+0

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

+0

Hala Kullanıcıların konuşmak chatroomda bir anti-repeat mesaj eklentisi yapıyorum Set –

cevap

0

, 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.

+3

Çok kolay değil. Yeniden icat 'HashSet' sınıfını kötü bir fikir olduğunu ve sadece – Bohemian

+0

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 . –

5

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.

+1

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. –

İlgili konular