Javolution 6.0.0 java
FastMap.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util;
10 
11 import static javolution.lang.Realtime.Limit.CONSTANT;
12 import static javolution.lang.Realtime.Limit.LINEAR;
13 
14 import java.io.Serializable;
15 import java.util.ConcurrentModificationException;
16 import java.util.Map;
17 import java.util.concurrent.ConcurrentMap;
18 
21 import javolution.lang.Realtime;
34 
96 @Realtime
97 public class FastMap<K, V> implements Map<K, V>, ConcurrentMap<K, V>,
98  Serializable {
99 
100  private static final long serialVersionUID = 0x600L; // Version.
101 
105  private final MapService<K, V> service;
106 
110  public FastMap() {
111  this(Equalities.STANDARD);
112  }
113 
118  public FastMap(Equality<? super K> keyEquality) {
119  this(keyEquality, Equalities.STANDARD);
120  }
121 
126  public FastMap(Equality<? super K> keyEquality,
127  Equality<? super V> valueEquality) {
128  service = new FastMapImpl<K, V>(keyEquality, valueEquality);
129  }
130 
135  this.service = service;
136  }
137 
139  // Views.
140  //
141 
149  @Parallelizable(mutexFree = true, comment = "Except for write operations, all read operations are mutex-free.")
150  public FastMap<K, V> atomic() {
151  return new FastMap<K, V>(new AtomicMapImpl<K, V>(service));
152  }
153 
163  @Parallelizable(mutexFree = false, comment = "Use multiple-readers/single-writer lock.")
164  public FastMap<K, V> shared() {
165  return new FastMap<K, V>(new SharedMapImpl<K, V>(service));
166  }
167 
180  }
181 
188  }
189 
197  }
198 
206  public FastSet<K> keySet() {
207  return new FastSet<K>(service.keySet());
208  }
209 
217  return new FastCollection<V>() {
218  private static final long serialVersionUID = 0x600L; // Version.
219  private final CollectionService<V> serviceValues = service.values();
220 
221  @Override
222  protected CollectionService<V> service() {
223  return serviceValues;
224  }
225  };
226  }
227 
237  return new FastSet<Entry<K, V>>(service.entrySet());
238  }
239 
241  // Closures operations.
242  //
243 
256  @Realtime(limit = LINEAR)
257  @SuppressWarnings("unchecked")
258  public void perform(Consumer<? extends Map<K, V>> action) {
259  service().perform((Consumer<MapService<K, V>>) action, service());
260  }
261 
274  @Realtime(limit = LINEAR)
275  @SuppressWarnings("unchecked")
276  public void update(Consumer<? extends Map<K, V>> action) {
277  service().update((Consumer<MapService<K, V>>) action, service());
278  }
279 
281  // Map Interface.
282  //
283 
285  @Override
286  @Realtime(limit = CONSTANT)
287  public int size() {
288  return service.size();
289  }
290 
292  @Override
293  @Realtime(limit = CONSTANT)
294  public boolean isEmpty() {
295  return service.isEmpty();
296  }
297 
299  @Override
300  @Realtime(limit = CONSTANT)
301  public boolean containsKey(Object key) {
302  return service.containsKey(key);
303  }
304 
306  @Override
307  @Realtime(limit = LINEAR)
308  public boolean containsValue(Object value) {
309  return service.containsValue(value);
310  }
311 
313  @Override
314  @Realtime(limit = CONSTANT)
315  public V get(Object key) {
316  return service.get(key);
317  }
318 
320  @Override
321  @Realtime(limit = CONSTANT)
322  public V put(K key, V value) {
323  return service.put(key, value);
324  }
325 
327  @Override
328  @Realtime(limit = LINEAR)
329  public void putAll(Map<? extends K, ? extends V> map) {
330  service.putAll(map);
331  }
332 
334  @Override
335  @Realtime(limit = CONSTANT)
336  public V remove(Object key) {
337  return service.remove(key);
338  }
339 
341  @Override
342  @Realtime(limit = CONSTANT)
343  public void clear() {
344  service.clear();
345  }
346 
348  // ConcurrentMap Interface.
349  //
350 
353  @Override
354  @Realtime(limit = CONSTANT)
355  public V putIfAbsent(K key, V value) {
356  return service.putIfAbsent(key, value);
357  }
358 
360  @Override
361  @Realtime(limit = CONSTANT)
362  public boolean remove(Object key, Object value) {
363  return service.remove(key, value);
364  }
365 
367  @Override
368  @Realtime(limit = CONSTANT)
369  public boolean replace(K key, V oldValue, V newValue) {
370  return service.replace(key, oldValue, newValue);
371  }
372 
374  @Override
375  @Realtime(limit = CONSTANT)
376  public V replace(K key, V value) {
377  return service.replace(key, value);
378  }
379 
381  // Misc.
382  //
383 
388  putAll((Map<? extends K, ? extends V>) that);
389  return this;
390  }
391 
398  public <T extends Map<K, V>> Immutable<T> toImmutable() {
399  return new Immutable<T>() {
400  @SuppressWarnings("unchecked")
401  final T value = (T) unmodifiable();
402 
403  @Override
404  public T value() {
405  return value;
406  }
407  };
408  }
409 
411  @Override
412  @Realtime(limit = LINEAR)
413  public String toString() {
414  return TextContext.getFormat(FastCollection.class).format(entrySet());
415  }
416 
420  protected MapService<K, V> service() {
421  return service;
422  }
423 
424 }
javolution.text.TextContext.getFormat
static< T > TextFormat< T > getFormat(Class<? extends T > type)
Definition: TextContext.java:69
javolution.util.FastMap.sequential
FastMap< K, V > sequential()
Definition: FastMap.java:186
javolution.util.function.Equalities.STANDARD
static final Equality< Object > STANDARD
Definition: Equalities.java:31
javolution.lang.Parallelizable
Definition: Parallelizable.java:55
javolution.util.internal.map.SequentialMapImpl
Definition: SequentialMapImpl.java:20
javolution
javolution.util.internal
javolution.util.FastMap.service
MapService< K, V > service()
Definition: FastMap.java:420
javolution.util.internal.map.SharedMapImpl
Definition: SharedMapImpl.java:21
javolution.util.service
Definition: BitSetService.java:9
javolution.lang.Realtime.Limit
Definition: Realtime.java:81
javolution.util.FastMap
Definition: FastMap.java:98
javolution.util.FastMap.FastMap
FastMap(MapService< K, V > service)
Definition: FastMap.java:134
javolution.util.FastMap.containsValue
boolean containsValue(Object value)
Definition: FastMap.java:308
javolution.util.FastMap.put
V put(K key, V value)
Definition: FastMap.java:322
javolution.util.FastMap.perform
void perform(Consumer<? extends Map< K, V >> action)
Definition: FastMap.java:258
javolution.util.FastMap.values
FastCollection< V > values()
Definition: FastMap.java:216
javolution.util.FastMap.isEmpty
boolean isEmpty()
Definition: FastMap.java:294
javolution.util.FastMap.shared
FastMap< K, V > shared()
Definition: FastMap.java:164
javolution.util.function.Consumer
Definition: Consumer.java:22
javolution.util.service.MapService
Definition: MapService.java:27
javolution.util.FastMap.FastMap
FastMap()
Definition: FastMap.java:110
javolution.util.internal.map.UnmodifiableMapImpl
Definition: UnmodifiableMapImpl.java:19
javolution.util.internal.map.AtomicMapImpl
Definition: AtomicMapImpl.java:21
javolution.util.FastMap.putAll
void putAll(Map<? extends K, ? extends V > map)
Definition: FastMap.java:329
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.FastMap.keySet
FastSet< K > keySet()
Definition: FastMap.java:206
javolution.util.FastMap.FastMap
FastMap(Equality<? super K > keyEquality)
Definition: FastMap.java:118
javolution.util.function.Equality
Definition: Equality.java:39
javolution.lang
Definition: Configurable.java:9
javolution.util.function.Equalities
Definition: Equalities.java:20
javolution.util.FastMap.clear
void clear()
Definition: FastMap.java:343
javolution.util.FastMap.parallel
FastMap< K, V > parallel()
Definition: FastMap.java:178
javolution.text
Definition: CharArray.java:9
javolution.util.FastMap.putIfAbsent
V putIfAbsent(K key, V value)
Definition: FastMap.java:355
javolution.util.FastMap.toString
String toString()
Definition: FastMap.java:413
javolution.util.FastMap.size
int size()
Definition: FastMap.java:287
javolution.util.FastMap.entrySet
FastSet< Entry< K, V > > entrySet()
Definition: FastMap.java:236
javolution.util.function
Definition: Consumer.java:9
javolution.lang.Realtime.Limit.LINEAR
LINEAR
Definition: Realtime.java:98
javolution.lang.Realtime.Limit.CONSTANT
CONSTANT
Definition: Realtime.java:86
javolution.util.FastMap.atomic
FastMap< K, V > atomic()
Definition: FastMap.java:150
javolution.util.FastMap.serialVersionUID
static final long serialVersionUID
Definition: FastMap.java:100
javolution.lang.Realtime
Definition: Realtime.java:59
javolution.util.FastMap.remove
V remove(Object key)
Definition: FastMap.java:336
javolution.util.FastMap.update
void update(Consumer<? extends Map< K, V >> action)
Definition: FastMap.java:276
javolution.util.FastMap.get
V get(Object key)
Definition: FastMap.java:315
javolution.util.FastCollection
Definition: FastCollection.java:166
javolution.util.FastMap.putAll
FastMap< K, V > putAll(FastMap<? extends K, ? extends V > that)
Definition: FastMap.java:387
javolution.util.internal.map.ParallelMapImpl
Definition: ParallelMapImpl.java:21
javolution.util.FastMap.service
final MapService< K, V > service
Definition: FastMap.java:105
javolution.util.FastMap.containsKey
boolean containsKey(Object key)
Definition: FastMap.java:301
javolution.lang.Immutable
Definition: Immutable.java:38
javolution.util.FastMap.unmodifiable
FastMap< K, V > unmodifiable()
Definition: FastMap.java:195
javolution.util.FastMap.FastMap
FastMap(Equality<? super K > keyEquality, Equality<? super V > valueEquality)
Definition: FastMap.java:126
javolution.util.internal.map.FastMapImpl
Definition: FastMapImpl.java:23
javolution.util.FastMap.toImmutable
public< T extends Map< K, V > > Immutable< T > toImmutable()
Definition: FastMap.java:398
javolution.util.FastSet
Definition: FastSet.java:37
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.map
Definition: AtomicMapImpl.java:9
javolution.text.TextContext
Definition: TextContext.java:49
javolution.util.FastMap.replace
boolean replace(K key, V oldValue, V newValue)
Definition: FastMap.java:369