1 /*
2 * Copyright (C) 2018, Konrad Windszus <konrad_w@gmx.de> and others
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Distribution License v. 1.0 which is available at
6 * https://www.eclipse.org/org/documents/edl-v10.php.
7 *
8 * SPDX-License-Identifier: BSD-3-Clause
9 */
10 package org.eclipse.jgit.util;
11
12 import java.util.LinkedHashMap;
13
14 /**
15 * Map with only up to n entries. If a new entry is added so that the map
16 * contains more than those n entries the least-recently used entry is removed
17 * from the map.
18 *
19 * @param <K>
20 * the type of keys maintained by this map
21 * @param <V>
22 * the type of mapped values
23 *
24 * @since 5.4
25 */
26 public class LRUMap<K, V> extends LinkedHashMap<K, V> {
27
28 private static final long serialVersionUID = 4329609127403759486L;
29
30 private final int limit;
31
32 /**
33 * Constructs an empty map which may contain at most the given amount of
34 * entries.
35 *
36 * @param initialCapacity
37 * the initial capacity
38 * @param limit
39 * the number of entries the map should have at most
40 */
41 public LRUMap(int initialCapacity, int limit) {
42 super(initialCapacity, 0.75f, true);
43 this.limit = limit;
44 }
45
46 @Override
47 protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
48 return size() > limit;
49 }
50 }