2012-02-20 10 views
7

Öğelerin geçerliliğini destekleyen bazı toplama uygulamaları var mı? ÖrneğinÖğelerin zaman aşımına uğraması ile Java Collection implementaiton

:

public ExpirableList(final long timeout){...} 

ve belirli bir zaman (bu özel örnekte 10000ms) sonra

elemanları ilave

Collection<User> cachedUsers = new ExpirableList<User>(10000); 

toplama kaldırılır. Bunu kullanarak, cachedUsers koleksiyonumuzun taşmasını önleyeceğiz.

+0

görünüyor: http://stackoverflow.com/questions/9352864 aynı anda işlenen –

cevap

9

Evet, Guava zamanlanmış sona erme ile bir önbellek destekler. Bkz Guava Explained's page on caches.

Bir alternatif, yeni bir öğe eklendiğinde en eski erişilen öğeden oluşan bir LRU (en son kullanılan en son kullanılan) önbellektir.

2

Bunu, ekleme zamanının anahtar olması için TreeMap için bir sarmalayıcı yazarak uygulayabilirsiniz. Her ekte, "zaman aşımına uğradı" olan kafa listesini bırakabilirsiniz.

Ekleme süresinin, bırakılıp bırakılmaması gerektiğine dair bir gösterge olarak kullanılması kötü bir fikir gibi görünüyor. Örneğin, bazı LRU (en az kullanılmış olan) önbellekle gitmek daha iyi görünüyor. Bu gibi önbellekler örneğin EHCache gibi kütüphanelerde mevcuttur. Tekerleği yeniden icat etmeyin.

İlgili sorular:

+0

Eklemeler, ain çok nadirdir Onlar değil mi? –

+0

Haha. İyi bir nokta. Çözüm, her bir zaman damgası haritasının bir dizi nesneye :-) izin vermesidir. – aioobe

3

Koleksiyonu nasıl kullanmaya çalıştığınız açık değil, ama Guava'nın CacheBuilder size yardımcı olabilir.

2

diğer alternatif ExpiringMap şudur: ... bir önbellek aradığınız gibi

Map<String, User> users = ExpiringMap.builder() 
    .expiration(10, TimeUnit.SECONDS) 
    .build(); 
İlgili konular