2013-06-22 20 views
6

tôi muốn loại bỏ các thành viên lớn tuổi nhất của một LinkedHashSet, tôi biết rằng có một phương pháp removeEldestEntry mà tôi phải ghi đè (Java doc for removeEldestEntry ), nhưng tôi đoán rằng tôi phải xác định initial capacityload factor mà tôi don' và tôi chỉ đơn giản muốn xóa phần tử ít được truy cập gần đây nhất (ở đây bằng cách truy cập tôi có nghĩa là put trong khi nó đã có sẵn trong bộ hoặc đang đọc)LinkedHashSet để thực hiện LRU

Có cách nào không ghi đè removeEldestEntry?

Trả lời

15

Tôi biết rằng có một phương pháp removeEldestEntry mà tôi phải override

Tuyên bố này là sai vì LinkedHashSet HAS-A LinkedHashMap và không IS-A.

Bạn có thể sử dụng hữu ích (mặc dù không nổi tiếng), Collections.newSetFromMap phương pháp:

Set<String> mySet = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>(){ 
    protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) { 
     return size() > MAX_ENTRIES; 
    } 
}); 

Nó sẽ do đó trả về một tầm nhìn Set của một (một giao diện Set-Like) LinkedHashMap thực hiện phương pháp tùy chỉnh removeEldestEntry của bạn.

MAX_ENTRIES là hằng số tùy chỉnh mà bạn đã xác định.

Các vấn đề liên quan