1 /********************************************************************** 2 * LRUMap.java 3 * created on 11.07.2006 by netseeker 4 * $Source$ 5 * $Date$ 6 * $Revision$ 7 * 8 * ==================================================================== 9 * 10 * Copyright 2006 netseeker aka Michael Manske 11 * 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 * ==================================================================== 24 * 25 * This file is part of the de.netseeker.ejoe.cache framework. 26 * For more information on the author, please see 27 * <http://www.manskes.de/>. 28 * 29 *********************************************************************/ 30 31 package de.netseeker.ejoe.cache; 32 33 import java.util.Collection; 34 import java.util.Collections; 35 import java.util.LinkedHashMap; 36 import java.util.Map; 37 import java.util.Set; 38 39 /*** 40 * Simple synchronized implementation of a least recently used cache (LRU). This class implements the Map interface 41 * hence it can be used easily as replacement for Collections.synchronizedMap(new HashMap()). 42 * 43 * @author netseeker 44 * @since 0.3.9.1 45 */ 46 public class LRUMap implements Map 47 { 48 private static final long serialVersionUID = 1L; 49 50 public static final int MAX_ENTRIES = 1000; 51 52 private int _maxEntries; 53 54 private Map _lruMap; 55 56 /*** 57 * Creates a new LRUMap 58 */ 59 public LRUMap() 60 { 61 this( MAX_ENTRIES ); 62 } 63 64 /*** 65 * Creates a new LRUMap 66 * 67 * @param maxEntries max size of the cache 68 */ 69 public LRUMap(int maxEntries) 70 { 71 _maxEntries = maxEntries; 72 _lruMap = Collections.synchronizedMap( new LinkedHashMap( maxEntries + 1, 75F, true ) 73 { 74 private static final long serialVersionUID = 1L; 75 76 protected boolean removeEldestEntry( Entry entry ) 77 { 78 return size() > _maxEntries; 79 } 80 } ); 81 } 82 83 public int size() 84 { 85 return _lruMap.size(); 86 } 87 88 public boolean isEmpty() 89 { 90 return _lruMap.isEmpty(); 91 } 92 93 public boolean containsKey( Object key ) 94 { 95 return _lruMap.containsKey( key ); 96 } 97 98 public boolean containsValue( Object value ) 99 { 100 return _lruMap.containsValue( value ); 101 } 102 103 public Object get( Object obj ) 104 { 105 return _lruMap.get( obj ); 106 } 107 108 public Object put( Object key, Object value ) 109 { 110 return _lruMap.put( key, value ); 111 } 112 113 public Object remove( Object key ) 114 { 115 return _lruMap.remove( key ); 116 } 117 118 public void putAll( Map map ) 119 { 120 _lruMap.putAll( map ); 121 } 122 123 public void clear() 124 { 125 _lruMap.clear(); 126 } 127 128 public Set keySet() 129 { 130 return _lruMap.keySet(); 131 } 132 133 public Collection values() 134 { 135 return _lruMap.values(); 136 } 137 138 public Set entrySet() 139 { 140 return _lruMap.entrySet(); 141 } 142 }