Создаю LRUcache алгоритм
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUAlgoritm<K, V> implements Cache<K, V>{
private LRUStorage storage;
// Конструтор
public LRUAlgoritm(int capacity) {
this.storage = new LRUStorage(capacity);
}
@Override
public V get(K key) {
return storage.get(key);
}
@Override
public V put(K key, V value) {
return storage.put(key,value);
}
private class LRUStorage extends LinkedHashMap<K, V>{
private final int capacity;
private LRUStorage (int capacity){
this.capacity = capacity;
}
protected boolean removedEldestEntry(Map.Entry<K, V> eldest){
return size()>capacity ;
}
}
@Override
public String toString() {
return "storage= " + storage ;
}
}
интерфейс cache
public interface Cache <K,V>{
V get (K key);
V put (K key, V value);
}
класс раннер
import java.util.LinkedHashMap;
import java.util.Map;
public class Runner {
public static void main (String[] args){
LRUAlgoritm<String, String> lruAlgoritm = new LRUAlgoritm(1);
lruAlgoritm.put("1","1");
lruAlgoritm.put("2","2");
lruAlgoritm.put("3","3");
lruAlgoritm.put("4","4");
/* for(Map.Entry<String, String> entry : lruAlgoritm.) {
String key = entry.getKey();
String value = entry.getValue()*/
System.out.println(lruAlgoritm);
}
}
В Runner
необходимо вывести сколько остается в storage. При выводе остаются все которые записываешь.
Результат вывода
storage= {1=1, 2=2, 3=3, 4=4}
а должен быть при
LRUAlgoritm<String, String> lruAlgoritm = new LRUAlgoritm(1);
storage= {4=4}
Отладчиком проверяю, что он делает понять не могу. Но то, что он не проверяет
protected boolean removedEldestEntry(Map.Entry<K, V> eldest)
Это видно, почему, не могу понять(((
Я пытаюсь создать такого типа логику, но почему в моем варианте должен вызываться метод removedEldestEntry не могу сообразить. Что я упускаю?
import java.util.*;
public class LinkedHashMapDemo {
private static final int MAX_ENTRIES = 2;
public static void main(String[] args) {
LinkedHashMap lhm = new LinkedHashMap(MAX_ENTRIES + 1, .75F, false) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
}
};
lhm.put(0, "H");
lhm.put(1, "E");
lhm.put(2, "L");
lhm.put(3, "L");
lhm.put(4, "O");
System.out.println("" + lhm) ;
}
}
Вы в коде нигде не вызываете метод removedEldestEntry
.
Ваша основная ошибка в том, что вы не используете аннотацию @Override
. Если бы вы её использовали, то получили бы ошибку компиляции. Так как метода removedEldestEntry
нет в предке и переопределить его нельзя.
У вас имя метода написано с ошибкой removedEldestEntry вместо removeEldestEntry.
Метод который вам нужен - removeEldestEntry
private class LRUStorage extends LinkedHashMap<K, V> {
private final int capacity;
private LRUStorage(int capacity) {
this.capacity = capacity;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > capacity;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Столкнулся с проблемой, не могу вернуть объект в REST-Controller (метод addUser)Вылазит ошибка HTTP Status 406 -The resource identified by this request is only capable of generating responses with characteristics...
Всем привет, сейчас пишу программу с большим количеством фрагментов и с одной активитиСуть в том, что в активити постоянно меняются местами...
Как у переменной типа string по индексу получить коды символов? Понятно что обращаться в цикле к индексуКак именно получить код и какой тип данных...
В android приложении по нажатию на кнопку должна начаться загрузка файла по прямой ссылке на загрузку файла( при открытии сразу предлагает сохранить...