net.ranides.assira.collection.map
Class MapAdapter<K,VS,VT>
java.lang.Object
net.ranides.assira.collection.map.MapAdapter<K,VS,VT>
- Type Parameters:
K - kluczVT - format publiczny, udostępniany konsumentowiVS - wewnętrzny format danych
- All Implemented Interfaces:
- Map<K,VT>, Function<VT,Map.Entry<K,VS>>
- Direct Known Subclasses:
- MapAdapterTT, MapBiAdapter
public abstract class MapAdapter<K,VS,VT>
- extends Object
- implements Map<K,VT>, Function<VT,Map.Entry<K,VS>>
Klasa abstrakcyjna umożliwiająca leniwą konwersję mapy elementów na inny format
(a więc tworzenie map tylko do odczytu). Konwertowane są tylko wartości umieszczone
w mapie - klucze nie mogą być transformowane.
Ogólny wariant adaptera zakłada, że konwersja może zwracać jako wynik obiekty
innej klasy, niż źródłowa. Specjalizacja MapAdapterTT służy do przeprowadzania
konwersji, które mają wpływ jedynie na wartości, ale nie na klasy elementów.
Oszczędza pamięć i czas procesora: nie musimy foreach'em
konwertować wszystkiego ze starej mapy i kopiować do nowej. Konwersja odbywa
się w locie. Jest to jeszcze bardziej istotne, niż w przypadku adapterów list,
ponieważ konstrukcja samej mapy jest bardzo kosztowna. Dzięki adapterowi nie
trzeba przebudowywać całego drzewa kluczy lub przeliczać wszystkich kodów
haszujących. Również oszczędność pamięciowa jest nieporównywalnie większa.
Mapa pozwala na modyfikację zawartości na tyle, na ile to możliwe - tzn np na usuwanie
kluczy. Zwrócone iteratory i widoki (entryList, values) pozwalają na wszystkie
operacje, delegując ich realizację do klasy. Aby więc stworzyć
w pełni funkcjonalny adapter działający w dwie strony, wystarczy zaimplementować
metodę put.
W metodzie apply można nie tylko
konwertować wartości, ale również logować operacje odczytu.
Z tego powodu adapter może być użyty z powodzeniem jako wydajna realizacja
obserwatora.
|
- Author:
- ranides
- See Also:
MapAdapterTT,
MapBiAdapter
| Nested classes/interfaces inherited from interface java.util.Map |
Map.Entry<K,V> |
|
Constructor Summary |
MapAdapter(Map<K,VS> content)
Tworzy nowy adapter odwzorowujący podaną mapę. |
| Methods inherited from interface net.ranides.assira.generic.Function |
apply |
MapAdapter
public MapAdapter(Map<K,VS> content)
- Tworzy nowy adapter odwzorowujący podaną mapę.
- Parameters:
content -
size
public int size()
- Specified by:
size in interface Map<K,VT>
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty in interface Map<K,VT>
containsKey
public boolean containsKey(Object key)
- Specified by:
containsKey in interface Map<K,VT>
containsValue
public boolean containsValue(Object value)
- Specified by:
containsValue in interface Map<K,VT>
get
public VT get(Object key)
- Specified by:
get in interface Map<K,VT>
put
public VT put(K key,
VT value)
- Specified by:
put in interface Map<K,VT>
remove
public VT remove(Object key)
- Specified by:
remove in interface Map<K,VT>
putAll
public void putAll(Map<? extends K,? extends VT> map)
- Specified by:
putAll in interface Map<K,VT>
clear
public void clear()
- Specified by:
clear in interface Map<K,VT>
keySet
public Set<K> keySet()
- Specified by:
keySet in interface Map<K,VT>
values
public Collection<VT> values()
- Specified by:
values in interface Map<K,VT>
entrySet
public Set<Map.Entry<K,VT>> entrySet()
- Specified by:
entrySet in interface Map<K,VT>
toString
public String toString()
- Overrides:
toString in class Object
Copyright © 2013. All Rights Reserved.