2012-02-20 3 views
7

요소 만료를 지원하는 일부 콜렉션 구현이 있습니까? 예를 들어요소의 시간 만료로 Java Collection 구현.

:

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

주어진 시간 (특정 실시 예에서 10000ms)

후에는, 추가 요소는

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

집합에서 제거한다. 이를 사용하여 cachedUsers 컬렉션의 오버플로를 방지합니다.

+0

가 보이는 : http://stackoverflow.com/questions/9352864 같은 시간에 최선을 다하고 –

답변

9

예, 구아바는 시간 제한 만료와 함께 캐시를 지원합니다. Guava Explained's page on caches을 참조하십시오.

대체 요소는 새로운 요소가 삽입 될 때 가장 오래된 액세스 된 요소를 처리하는 LRU (least-recently used) 캐시입니다.

2

예를 들어, 삽입 시간을 키로 두는 TreeMap에 대한 래퍼를 작성하여이를 구현할 수 있습니다. 각 인서트에서 "시간 초과"된 헤드 목록을 삭제할 수 있습니다.

삽입 시간을 삭제해야하는지 여부를 나타내는 표시로 사용하는 것은 좋지 않은 것처럼 보입니다. 예를 들어 LRU (최소 최근 사용) 캐시를 사용하는 것이 좋습니다. 이러한 캐시는 예를 들어 EHCache과 같은 라이브러리에서 쉽게 사용할 수 있습니다. 바퀴를 다시 열지 마십시오.

관련 질문 :

+0

삽입은 아인 매우 드물다 그들? –

+0

하하. 좋은 지적. 해결책은 각 타임 스탬프가 객체 세트에 맵핑되도록하는 것입니다 :-) – aioobe

3

어떻게 컬렉션을 사용하려고하는지 명확하지 않지만 Guava의 CacheBuilder이 도움이됩니다.

2

또 다른 대안은 ExpiringMap입니다 : 당신은 ... 캐시를 찾고있는 것처럼

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