net.ranides.assira.collection.map
Class LazyMap<K,V>

java.lang.Object
  extended by java.util.AbstractMap<K,V>
      extended by java.util.HashMap<K,V>
          extended by net.ranides.assira.collection.map.LazyMap<K,V>
Type Parameters:
K -
V -
All Implemented Interfaces:
Serializable, Cloneable, Map<K,V>, Function<V,K>

public abstract class LazyMap<K,V>
extends HashMap<K,V>
implements Function<V,K>

Mapa, która nie zwraca null, w przypadku, gdy mapowanie nie istnieje, lecz tworząca nowe wiązanie na żądanie. Może tworzyć wiązania dopiero podczas odczytu klucza (np metodą "get") albo natychmiast po wywołaniu metody containsKey.

Domyślnie kolekcja stara się ograniczyć tworzenie i niszczenie obiektów - raz utworzony obiekt jest zapisywany do mapy. Nawet po jego usunięciu jest przez pewien czas nadal przechowywany w pamięci podręcznej, i przywracany w razie potrzeby.

Z tego powodu klasa dobrze sprawdza się jako bufor pośredni pomiędzy zewnętrznymi wolnymi źródłami danych.

Uwaga! Jeśli mapa przechowuje wartości, które mogą zmieniać stan, lepiej wyłączyć pamięć podręczną, ponieważ usunięte elementy w późniejszym czasie mogą zostać przywrócone ze starym stanem.

Author:
ranides
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class java.util.AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
 
Constructor Summary
LazyMap()
          Tworzy nową mapę z argumentami instant=true oraz cachesize = 32
LazyMap(boolean instant, int cachesize)
          Tworzy nową mapę z określoną strategią tworzenia obiektów oraz określonym rozmiarem pamięci podręcznej.
 
Method Summary
 void clear()
           
 void clear(boolean flush)
          Czyści zawartość mapy oraz pamięci podręcznej (jeśli argument flush równy true.
 boolean containsKey(Object key)
           
 boolean containsValue(Object value)
           
 V get(Object key)
           
static
<K,V> LazyMap<K,V>
makeInstance(boolean instant, Class<?> value)
          Tworzy nową mapę, która w razie potrzeby tworzy nowe obiekty podanej klasy za pomocą konstruktora domyślnego.
static
<K,V> LazyMap<K,V>
makeInstance(Class<?> value)
          Tworzy nową mapę, która w razie potrzeby tworzy nowe obiekty podanej klasy za pomocą konstruktora domyślnego.
 V remove(Object key)
           
 
Methods inherited from class java.util.HashMap
clone, entrySet, isEmpty, keySet, put, putAll, size, values
 
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.ranides.assira.generic.Function
apply
 
Methods inherited from interface java.util.Map
equals, hashCode
 

Constructor Detail

LazyMap

public LazyMap()
Tworzy nową mapę z argumentami instant=true oraz cachesize = 32


LazyMap

public LazyMap(boolean instant,
               int cachesize)
Tworzy nową mapę z określoną strategią tworzenia obiektów oraz określonym rozmiarem pamięci podręcznej.

Parameters:
instant - decyduje o tym, kiedy zostanie wysłane żądanie utworzenia nowego powiązania.

Jeśli wartość równa true, to funkcja stara się załadować obiekt i zwrócić true, jeśli tylko otrzymany wynik będzie różny od null. Jeśli argument jest ustawiony na false metoda contains zwraca informację na temat aktualnej zawartości w mapie - jeśli klucz nie instnieje, to nie próbuje doładowywać danych.

Bez względu na wartość argumentu, metoda get zawsze stara się doładować obiekt, jeśli powiązanie nie znajduje się w mapie.

cachesize - rozmiar pamięci podręcznej na usunięte elementy.

Klasa stara się minimalizować ilość wywołań funkcji łądującej dane. W pamięci podręcznej są przechowywane obiekty, które usunięto z mapy, ale które mogą zostać przywrócone, jeśli nastapi żądanie ich odczytu.

Jeśli argument = 0, to pamięć podręczna jest wyłączona

Method Detail

containsKey

public boolean containsKey(Object key)
Specified by:
containsKey in interface Map<K,V>
Overrides:
containsKey in class HashMap<K,V>

get

public V get(Object key)
Specified by:
get in interface Map<K,V>
Overrides:
get in class HashMap<K,V>

containsValue

public boolean containsValue(Object value)
Specified by:
containsValue in interface Map<K,V>
Overrides:
containsValue in class HashMap<K,V>

remove

public V remove(Object key)
Specified by:
remove in interface Map<K,V>
Overrides:
remove in class HashMap<K,V>

clear

public void clear()
Specified by:
clear in interface Map<K,V>
Overrides:
clear in class HashMap<K,V>

clear

public void clear(boolean flush)
Czyści zawartość mapy oraz pamięci podręcznej (jeśli argument flush równy true. Należy zwrócić uwagę, że zwykła metoda clear() nie czyści pamięci podręcznej, lecz stara się do niej przenieść tak wiele ostatnio używanych elementów, jak to możliwe.

Parameters:
flush - czy wyczyścić również pamięć podręczną

makeInstance

public static <K,V> LazyMap<K,V> makeInstance(Class<?> value)
Tworzy nową mapę, która w razie potrzeby tworzy nowe obiekty podanej klasy za pomocą konstruktora domyślnego. Argument instant = true, zaś pamięć podręczna jest oczywiście wyłączona.

Type Parameters:
K -
V -
Parameters:
value -
Returns:

makeInstance

public static <K,V> LazyMap<K,V> makeInstance(boolean instant,
                                              Class<?> value)
Tworzy nową mapę, która w razie potrzeby tworzy nowe obiekty podanej klasy za pomocą konstruktora domyślnego. Pamięć podręczna jest oczywiście wyłączona.

Type Parameters:
K -
V -
Parameters:
instant -
value -
Returns:


Copyright © 2013. All Rights Reserved.