2012-07-23 5 views
11

He estado buscando una lista de Java, un conjunto o algo similar que tenga entradas caducan después de un período de tiempo determinado, pero todavía no he encontrado ninguna. Encontré el CacheBuilder de Guava, que sería casi perfecto para mi uso, pero que es un mapa en lugar de una Lista o un Conjunto. ¿Hay algo por el estilo como este o tendré que hacer uno si quiero usarlo?¿Tiempo de Java que expira List/Set?

+2

¿Cuál es su caso de uso? – Bohemian

+0

También estoy teniendo problemas para ver un caso de uso. Normalmente, cuando desea almacenar en caché cosas, necesita una clave para recuperar lo que se está almacenando en caché, de ahí que cada implementación de caché funcione con la interfaz de Mapa (o algo similar). – Matt

+0

aún puede iterar sobre el conjunto –

Respuesta

0

Dado que la implementación de Java HashSet utiliza internamente un HashMap, debería ser realmente fácil copiar/modificar el código para que use Guavas CacheBuilder.

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

En otras palabras, sólo implementar su SetWithExpirationCacheBuilder como un mapa de una tecla a. Esto no perderá más eficiencia de la que la implementación de Java HashSet pierde utilizando un HashMap subyacente.

+3

No es tan simple. Reinventar la clase 'HashSet' es una mala idea, y no se puede simplemente" hacer que HashSet use CacheBuilder en su lugar " – Bohemian

+0

sí, la solución de código limpio sería extender AbstractSet y usar internamente un mapa que se pasa por inyección de dependencia . –

5

Para usar CacheBuilder para obtener una lista de caducidad, puede poner sus objetos en el mapa como claves y algún objeto ficticio como valores.

+1

O use sus objetos como clave y valor. Solo tenga cuidado de no crear un nuevo objeto para cada maniquí, ya que sería un desperdicio. –

Cuestiones relacionadas