2012-02-20 31 views
7

Có một số triển khai bộ sưu tập hỗ trợ hết hạn các thành phần hay không.Thực hiện Bộ sưu tập Java với thời gian chờ của các thành phần

Ví dụ:

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

nơi

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

Và sau thời gian nhất định (10000ms trong ví dụ cụ thể này), thêm các yếu tố sẽ được xóa khỏi bộ sưu tập. Bằng cách sử dụng điều này, chúng tôi sẽ ngăn chặn tràn bộ sưu tập cachedUsers của chúng tôi.

+0

Hình như bạn đang tìm kiếm ... một bộ nhớ cache: http://stackoverflow.com/questions/9352864 –

Trả lời

9

Vâng, ổi hỗ trợ một bộ nhớ cache với thời hạn theo thời gian. Xem Guava Explained's page on caches.

Một giải pháp thay thế là bộ nhớ cache LRU (ít được sử dụng gần đây nhất) phân phối thành phần truy cập cũ nhất khi phần tử mới được chèn vào.

2

Bạn có thể thực hiện điều này bằng cách viết một trình bao bọc cho, ví dụ: TreeMap nơi bạn để thời gian chèn là khóa. Trên mỗi lần chèn, bạn có thể thả danh sách đầu đã "hết thời gian chờ".

Sử dụng thời gian chèn làm chỉ báo về việc có nên bỏ qua hay không có vẻ như là một ý tưởng tồi. Nó có vẻ tốt hơn để đi với một số LRU (ít được sử dụng gần đây) bộ nhớ cache ví dụ. Ví dụ như các bộ nhớ đệm như vậy có sẵn trong các thư viện chẳng hạn như EHCache. Không phát minh lại bánh xe.

câu hỏi liên quan:

+0

Insertions cam kết cùng một lúc là rất hiếm, ain họ? –

+0

Haha. Điểm tốt. Giải pháp rõ ràng là để cho mỗi bản đồ dấu thời gian cho một tập hợp các đối tượng :-) – aioobe

3

Nó không thực sự rõ ràng như thế nào bạn đang cố gắng sử dụng bộ sưu tập, nhưng số CacheBuilder của Guava có thể giúp bạn.

2

lựa chọn khác là ExpiringMap:

Map<String, User> users = ExpiringMap.builder() 
    .expiration(10, TimeUnit.SECONDS) 
    .build(); 
Các vấn đề liên quan