JCS: используется сложный объект или строка в качестве ключа
У меня есть вопрос о том, как.get (ключ) работает.
Если я использую сложный объект в качестве ключа, я понял, что функция equals не вызывается. Но которые ссылаются на структуру, используемую для идентификации ключевых объектов.
Мне нужно знать, какой из них быстрее? Строка или Объект как ключ?
1 ответ
Это функция get, getCacheControl()
возвращает IMemoryCache<K, V>
реализация.
@Override
public V get( K name )
{
ICacheElement<K, V> element = this.getCacheControl().get( name );
return ( element != null ) ? element.getVal() : null;
}
AbstractMemoryCache, реализующий IMemoryCache и использующий карту,
https://github.com/apache/commons-jcs/blob/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
/** Map where items are stored by key. This is created by the concrete child class. */
public Map<K, MemoryElementDescriptor<K, V>>
Таким образом, мы можем предположить аналогичную семантику. Составные объекты не должны иметь никакого значения, может быть, вы забыли переопределить hashCode
, Карта сначала использует это, чтобы найти ведро, позже использует equals
,