Что будет выведено следующим кодом:

import java.util.*;
public class My11 {
    public static void main(String...args) {
        final int num = 3;
        LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(num,1,true) {
            public boolean removeEldestEntry (Map.Entry<String,String> eldest) {
                return size()>num;
            }
        };
        map.put("1", "str1");
        map.put("2", "str2");
        map.put("3", "str3");
        map.put("4", "str4");
        map.get("2");
        System.out.println(map);
    }
}
Explanation
В конструкторе класса LinkedHashMap первый параметр - это максимальное кол-во эл-тов, обычно оно увеличивается вдвое при достижении максимума, но только если метод removeEldestEntry возвращает false(по умолчанию он это всегда и делает). Но в данном примере он переопределен в наследуемом безымянном классе и возвращает true, если size()>num.

А вот третий параметр определяет в каком порядке будут храниться пары <Key,Value>. По умолчанию(false) они хранятся в порядке вставки (insert-order). Если третий параметр имеет значение true, то используется порядок доступа (access-order).

Всё это можно использовать для того, чтобы организовать LRU-кэш, т.е. при добавлении нового эл-та из кэша будет удаляться эл-т с наиболее длительным отсутствием обращений (Least Recently Used - LRU).

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты