Class PersistentMap<K,V>

java.lang.Object
net.cscott.jutil.PersistentMap<K,V>
All Implemented Interfaces:
Serializable

public class PersistentMap<K,V> extends Object implements Serializable
PersistentMap implements a persistent map, based on a persistent randomized treap. Unlike the Maps returned by PersistentMapFactory, PersistentMap does not implement that standard Map API but instead exposes the underlying functional operations.
Author:
C. Scott Ananian <cananian@alumni.princeton.edu>
See Also:
Tests:
A {@link PersistentMap} is never changed: {@link #put put()} and {@link #remove remove()} return a new map, which shares most of its structure with the old one.
js> empty = new PersistentMap()
{}
js> one = empty.put("a", "apple")
{a=apple}
js> two = one.put("b", "banana")
{a=apple, b=banana}
js> two.remove("a")
{b=banana}
js> one
{a=apple}
js> two.get("b")
banana
  • Constructor Details

    • PersistentMap

      public PersistentMap()
      Creates an empty PersistentMap whose key objects will all implement Comparable. Note that good hashcode implementations for the key objects are still required.
    • PersistentMap

      public PersistentMap(Comparator<K> c)
      Creates an empty PersistentMap whose key objects are ordered by the given Comparator. Note that good hashcode implementations for the key objects are still required.
  • Method Details

    • isEmpty

      public boolean isEmpty()
      Determines if this PersistentMap has any mappings.
    • size

      public int size()
      Count the number of key->value mappings in this PersistentMap.
    • put

      public PersistentMap<K,V> put(K key, V value)
      Creates and returns a new PersistentMap identical to this one, except it contains a mapping from key to value.
    • get

      public V get(K key)
      Gets the value which key maps to.
    • containsKey

      public boolean containsKey(K key)
      Determines if there is a mapping for the given key.
    • remove

      public PersistentMap<K,V> remove(K key)
      Make a new PersistentMap identical to this one, except that it does not contain a mapping for key.
    • putAll

      public PersistentMap<K,V> putAll(PersistentMap<K,V> map)
      Put all the mappings in the given map into this map, throwing out conflicting mappings from this set as necessary.
    • clone

      public PersistentMap<K,V> clone()
      Cloning takes constant time, regardless of the size of the map.
      Overrides:
      clone in class Object
    • toString

      public String toString()
      Human-readable representation of the map.
      Overrides:
      toString in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • asMap

      public Map<K,V> asMap()
      Collections view of the mapping.