OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
180 ilm 1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
10
 *
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
13
 
14
 package org.openconcerto.utils.cache;
15
 
16
import java.util.LinkedHashMap;
17
 
18
public class LRUMap<K, V> extends LinkedHashMap<K, V> {
19
 
20
    static final float DEFAULT_LOAD_FACTOR = 0.75f;
21
    static final int REHASH_GROWTH = 2;
22
    private static final int MIN_CAPACITY = 4;
23
    private static final int SIZE_THRESHOLD = (int) (MIN_CAPACITY * DEFAULT_LOAD_FACTOR * REHASH_GROWTH);
24
 
25
    private int maxSize;
26
 
27
    public LRUMap(final int maxSize) {
28
        this(maxSize, maxSize <= SIZE_THRESHOLD ? MIN_CAPACITY : (int) (maxSize / DEFAULT_LOAD_FACTOR / REHASH_GROWTH + 1));
29
    }
30
 
31
    public LRUMap(final int maxSize, final int initialCapacity) {
32
        this(maxSize, initialCapacity, DEFAULT_LOAD_FACTOR);
33
    }
34
 
35
    public LRUMap(final int maxSize, int initialCapacity, float loadFactor) {
36
        super(initialCapacity, loadFactor, true);
37
        this.setMaxSize(maxSize);
38
    }
39
 
40
    public final int getMaxSize() {
41
        return this.maxSize;
42
    }
43
 
44
    public final void setMaxSize(int maxSize) {
45
        this.maxSize = maxSize;
46
    }
47
 
48
    @Override
49
    protected final boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
50
        return this.size() > this.getMaxSize();
51
    }
52
}