Увеличение размера LRUMap после создания

Добавление в обсуждение: Каково значение коэффициента загрузки в HashMap?

Если я использую org.apache.commons.collections.map.LRUMap, размер LRUMap увеличится, как только он достигнет максимального размера.

Если бы я создал экземпляр LRUMap

        maxSize= 1024
       LRUMap myCacheMap = new LRUMap(maxSize)

если myCacheMap достигает 1024-й пары значений ключа или записи, и если я добавлю еще один элемент, он автоматически увеличится до 2048. Если он увеличивается автоматически, то зачем нам метод isFull(). Поскольку он никогда не будет полным, он будет автоматически увеличиваться. Я упускаю момент в этом. Извините, что задаю два вопроса в одном.

Заранее спасибо.


person sarmahdi    schedule 02.08.2014    source источник


Ответы (2)


Максимальный размер никогда не будет увеличен. Это основной принцип любой карты, основанной на алгоритме наименее недавно использованного (LRU).

когда LRUMap достигает своего максимального размера, он просто удаляет с карты наименее использовавшуюся запись.

Вот фрагмент из источника LRUMap.put()

if ( mapSize >= maximumSize ) {

        // don't retire LRU if you are just
        // updating an existing key
        if (!containsKey(key)) {
            // lets retire the least recently used item in the cache
           removeLRU();
        }
    }
person Kvk    schedule 02.08.2014
comment
благодаря обоим вашим ответам. Еще одна вещь. Тогда почему в LRUMap есть коэффициент загрузки. Я на самом деле также думал, что, поскольку мы говорим, что есть метод MaxSize и есть метод isFull(), размер не должен увеличиваться, поскольку это LRU. Затем я увидел связанное обсуждение коэффициента нагрузки и, следовательно, мой вопрос. Тогда играет ли фактор нагрузки какую-либо роль в LRU. - person sarmahdi; 03.08.2014
comment
При создании LRUMap, если вы укажете maxsize как ‹ 1, карта изначально создается с DEFAULT_CAPACITY(16). С этого момента его можно увеличить до DEFAULT_MAX_SIZE (100). В этом сценарии используются коэффициент нагрузки и пороговое значение. Как только карта достигнет максимального размера, она никогда не будет увеличена. - person Kvk; 03.08.2014

Суть LRUMap заключается в том, что он имеет фиксированный максимальный размер, который не увеличивается автоматически при достижении. Добавление новой записи, когда карта заполнена, приводит к удалению последней использованной записи.

Реализация карты с фиксированным максимальным размером, которая удаляет наименее использовавшуюся запись, если запись добавляется при заполнении.

Поэтому isFull() имеет смысл. Если он возвращает true, вы знаете, что добавление новой записи на карту удалит последнюю использованную запись.

person Eran    schedule 02.08.2014