Class LongObjectOrderedMap<V>

java.lang.Object
com.github.tommyettinger.ds.LongObjectMap<V>
com.github.tommyettinger.ds.LongObjectOrderedMap<V>
All Implemented Interfaces:
Arrangeable, Ordered.OfLong, Iterable<LongObjectMap.Entry<V>>

public class LongObjectOrderedMap<V> extends LongObjectMap<V> implements Ordered.OfLong
A LongObjectMap that also stores keys in an LongList using the insertion order. Null keys are not allowed. No allocation is done except when growing the table size.

Iteration over the entrySet(), keySet(), and values() is ordered and faster than an unordered map. Keys can also be accessed and the order changed using order(). There is some additional overhead for put and remove.

This class performs fast contains (typically O(1), worst case O(n) but that is rare in practice). Remove is somewhat slower due to order(). Add may be slightly slower, depending on hash collisions. Hashcodes are rehashed to reduce collisions and the need to resize. Load factors greater than 0.91 greatly increase the chances to resize to the next higher POT size.

Unordered sets and maps are not designed to provide especially fast iteration. Iteration is faster with Ordered types like ObjectOrderedSet and LongObjectOrderedMap.

You can customize most behavior of this map by extending it. LongObjectMap.place(long) can be overridden to change how hashCodes are calculated (which can be useful for types like StringBuilder that don't implement hashCode()), and LongObjectMap.locateKey(long) can be overridden to change how equality is calculated.

This implementation uses linear probing with the backward shift algorithm for removal. It tries different hashes from a simple family, with the hash changing on resize. Linear probing continues to work even when all hashCodes collide, just more slowly.

  • Field Details

  • Constructor Details

    • LongObjectOrderedMap

      public LongObjectOrderedMap(OrderType ordering)
      Creates a new map with an initial capacity of Utilities.getDefaultTableCapacity() and a load factor of Utilities.getDefaultLoadFactor().
      Parameters:
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(int initialCapacity, OrderType ordering)
      Creates a new map with the given starting capacity and a load factor of Utilities.getDefaultLoadFactor().
      Parameters:
      initialCapacity - If not a power of two, it is increased to the next nearest power of two.
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(int initialCapacity, float loadFactor, OrderType ordering)
      Creates a new map with the specified initial capacity and load factor. This map will hold initialCapacity items before growing the backing table.
      Parameters:
      initialCapacity - If not a power of two, it is increased to the next nearest power of two.
      loadFactor - what fraction of the capacity can be filled before this has to resize; 0 < loadFactor <= 1
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(LongObjectOrderedMap<? extends V> map)
      Creates a new map identical to the specified map.
      Parameters:
      map - the map to copy
    • LongObjectOrderedMap

      public LongObjectOrderedMap(LongObjectMap<? extends V> map, OrderType ordering)
      Creates a new map identical to the specified map.
      Parameters:
      map - the map to copy
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(LongObjectOrderedMap<? extends V> other, int offset, int count)
      Creates a new set by copying count items from the given LongObjectOrderedMap, starting at offset in that Map, into this.
      Parameters:
      other - another LongObjectOrderedMap of the same type
      offset - the first index in other's ordering to draw an item from
      count - how many items to copy from other
    • LongObjectOrderedMap

      public LongObjectOrderedMap(LongObjectMap<? extends V> map)
      Creates a new map identical to the specified map.
      Parameters:
      map - the map to copy
    • LongObjectOrderedMap

      public LongObjectOrderedMap(LongObjectOrderedMap<? extends V> other, int offset, int count, OrderType ordering)
      Creates a new set by copying count items from the given LongObjectOrderedMap, starting at offset in that Map, into this.
      Parameters:
      other - another LongObjectOrderedMap of the same type
      offset - the first index in other's ordering to draw an item from
      count - how many items to copy from other
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(long[] keys, V[] values, OrderType ordering)
      Given two side-by-side arrays, one of keys, one of values, this constructs a map and inserts each pair of key and value into it. If keys and values have different lengths, this only uses the length of the smaller array.
      Parameters:
      keys - an array of keys
      values - an array of values
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap(PrimitiveCollection.OfLong keys, Collection<? extends V> values, OrderType ordering)
      Given two side-by-side collections, one of keys, one of values, this constructs a map and inserts each pair of key and value into it. If keys and values have different lengths, this only uses the length of the smaller collection.
      Parameters:
      keys - a PrimitiveCollection of keys
      values - a PrimitiveCollection of values
      ordering - determines what implementation order() will use
    • LongObjectOrderedMap

      public LongObjectOrderedMap()
      Creates a new map with an initial capacity of Utilities.getDefaultTableCapacity() and a load factor of Utilities.getDefaultLoadFactor().
    • LongObjectOrderedMap

      public LongObjectOrderedMap(int initialCapacity)
      Creates a new map with the given starting capacity and a load factor of Utilities.getDefaultLoadFactor().
      Parameters:
      initialCapacity - If not a power of two, it is increased to the next nearest power of two.
    • LongObjectOrderedMap

      public LongObjectOrderedMap(int initialCapacity, float loadFactor)
      Creates a new map with the specified initial capacity and load factor. This map will hold initialCapacity items before growing the backing table.
      Parameters:
      initialCapacity - If not a power of two, it is increased to the next nearest power of two.
      loadFactor - what fraction of the capacity can be filled before this has to resize; 0 < loadFactor <= 1
    • LongObjectOrderedMap

      public LongObjectOrderedMap(long[] keys, V[] values)
      Given two side-by-side arrays, one of keys, one of values, this constructs a map and inserts each pair of key and value into it. If keys and values have different lengths, this only uses the length of the smaller array.
      Parameters:
      keys - an array of keys
      values - an array of values
    • LongObjectOrderedMap

      public LongObjectOrderedMap(PrimitiveCollection.OfLong keys, Collection<? extends V> values)
      Given two side-by-side collections, one of keys, one of values, this constructs a map and inserts each pair of key and value into it. If keys and values have different lengths, this only uses the length of the smaller collection.
      Parameters:
      keys - a PrimitiveCollection of keys
      values - a PrimitiveCollection of values
  • Method Details

    • put

      public V put(long key, V value)
      Description copied from class: LongObjectMap
      Returns the old value associated with the specified key, or this map's LongObjectMap.defaultValue if there was no prior value.
      Overrides:
      put in class LongObjectMap<V>
    • put

      public V put(long key, V value, int index)
      Puts the given key and value into this map at the given index in its order. If the key is already present at a different index, it is moved to the given index and its value is set to the given value.
      Parameters:
      key - a long key
      value - a V value; permitted to be null
      index - the index in the order to place the given key and value; must be non-negative and less than LongObjectMap.size()
      Returns:
      the previous value associated with key, if there was one, or null otherwise
    • putOrDefault

      public V putOrDefault(long key, V value, V defaultValue)
      Description copied from class: LongObjectMap
      Returns the old value associated with the specified key, or the given defaultValue if there was no prior value.
      Overrides:
      putOrDefault in class LongObjectMap<V>
    • putAll

      public void putAll(LongObjectOrderedMap<? extends V> map)
      Puts every key-value pair in the given map into this, with the values from the given map overwriting the previous values if two keys are identical. This will put keys in the order of the given map.
      Parameters:
      map - a map with compatible key and value types; will not be modified
    • putAll

      public void putAll(LongObjectOrderedMap<? extends V> other, int offset, int count)
      Adds up to count entries, starting from offset, in the map other to this set, inserting at the end of the iteration order.
      Parameters:
      other - a non-null ordered map with the same type and compatible generic types
      offset - the first index in other to use
      count - how many indices in other to use
    • putAll

      public void putAll(int insertionIndex, LongObjectOrderedMap<? extends V> other, int offset, int count)
      Adds up to count entries, starting from offset, in the map other to this set, inserting starting at insertionIndex in the iteration order.
      Parameters:
      insertionIndex - where to insert into the iteration order
      other - a non-null ordered map with the same type and compatible generic types
      offset - the first index in other to use
      count - how many indices in other to use
    • remove

      public V remove(long key)
      Overrides:
      remove in class LongObjectMap<V>
    • removeAt

      public V removeAt(int index)
      Removes the entry at the given index in the order, returning the value of that entry.
      Parameters:
      index - the index of the entry to remove; must be at least 0 and less than LongObjectMap.size()
      Returns:
      the value of the removed entry
    • removeRange

      public void removeRange(int start, int end)
      Removes the items between the specified start index, inclusive, and end index, exclusive. Note that this takes different arguments than some other range-related methods; this needs a start index and an end index, rather than a count of items. This matches the behavior in the JDK collections.
      Specified by:
      removeRange in interface Ordered.OfLong
      Parameters:
      start - the first index to remove, inclusive
      end - the last index (after what should be removed), exclusive
    • truncate

      public void truncate(int newSize)
      Reduces the size of the map to the specified size. If the map is already smaller than the specified size, no action is taken.
      Overrides:
      truncate in class LongObjectMap<V>
      Parameters:
      newSize - the target size to try to reach by removing items, if smaller than the current size
    • ensureCapacity

      public void ensureCapacity(int additionalCapacity)
      Increases the size of the backing array to accommodate the specified number of additional items / loadFactor. Useful before adding many items to avoid multiple backing array resizes.
      Overrides:
      ensureCapacity in class LongObjectMap<V>
      Parameters:
      additionalCapacity - how many additional items this should be able to hold without resizing (probably)
    • alter

      public boolean alter(long before, long after)
      Changes the key before to after without changing its position in the order or its value. Returns true if after has been added to the LongObjectOrderedMap and before has been removed; returns false if after is already present or before is not present. If you are iterating over an LongObjectOrderedMap and have an index, you should prefer alterAt(int, long), which doesn't need to search for an index like this does and so can be faster.
      Parameters:
      before - a key that must be present for this to succeed
      after - a key that must not be in this map for this to succeed
      Returns:
      true if before was removed and after was added, false otherwise
    • alterAt

      public boolean alterAt(int index, long after)
      Changes the key at the given index in the order to after, without changing the ordering of other entries or any values. If after is already present, this returns false; it will also return false if index is invalid for the size of this map. Otherwise, it returns true. Unlike alter(long, long), this operates in constant time.
      Parameters:
      index - the index in the order of the key to change; must be non-negative and less than LongObjectMap.size
      after - the key that will replace the contents at index; this key must not be present for this to succeed
      Returns:
      true if after successfully replaced the key at index, false otherwise
    • setAt

      public V setAt(int index, V v)
      Changes the value at a specified index in the iteration order to v, without changing keys at all. If index isn't currently a valid index in the iteration order, this returns null. Otherwise, it returns the value that was previously held at index, which may also be null.
      Parameters:
      v - the new V value to assign
      index - the index in the iteration order to set v at
      Returns:
      the previous value held at index in the iteration order, which may be null if the value was null or if index was invalid
    • getAt

      public V getAt(int index)
      Gets the V value at the given index in the insertion order. The index should be between 0 (inclusive) and LongObjectMap.size() (exclusive).
      Parameters:
      index - an index in the insertion order, between 0 (inclusive) and LongObjectMap.size() (exclusive)
      Returns:
      the value at the given index
    • keyAt

      public long keyAt(int index)
      Gets the long key at the given index in the insertion order. The index should be between 0 (inclusive) and LongObjectMap.size() (exclusive).
      Parameters:
      index - an index in the insertion order, between 0 (inclusive) and LongObjectMap.size() (exclusive)
      Returns:
      the key at the given index
    • clear

      public void clear(int maximumCapacity)
      Description copied from class: LongObjectMap
      Clears the map and reduces the size of the backing arrays to be the specified capacity / loadFactor, if they are larger.
      Overrides:
      clear in class LongObjectMap<V>
    • clear

      public void clear()
      Overrides:
      clear in class LongObjectMap<V>
    • order

      public LongList order()
      Gets the LongList of keys in the order this class will iterate through them. Returns a direct reference to the same LongList this uses, so changes to the returned list will also change the iteration order here.
      Specified by:
      order in interface Ordered.OfLong
      Returns:
      the LongList of keys, in iteration order (usually insertion-order), that this uses
    • sort

      public void sort()
      Sorts this LongObjectOrderedMap in-place by the keys' natural ordering.
    • sort

      public void sort(LongComparator comp)
      Sorts this LongObjectOrderedMap in-place by the given LongComparator used on the keys. If comp is null, then this will sort by the natural ordering of the keys.
      Specified by:
      sort in interface Ordered.OfLong
      Parameters:
      comp - a LongComparator, such as one from LongComparators, or null to use the keys' natural ordering
    • sortByValue

      public void sortByValue(Comparator<V> comp)
      Sorts this LongObjectOrderedMap in-place by the given Comparator used on the values. comp must be able to compare V values. If any null values are present in this LongObjectOrderedMap, then comp must be able to sort or otherwise handle null values. You can use pass null to do what sort() does when given null (just sorting values in this case instead of keys) if the values implement Comparable (requiring all of them to be non-null).
      Parameters:
      comp - a Comparator that can compare V values; may be null to use natural order of Comparable values
    • keySet

      public LongObjectMap.Keys<V> keySet()
      Returns a Set view of the keys contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation), the results of the iteration are undefined. The set supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Set.remove, removeAll, retainAll, and clear operations. It does not support the add or addAll operations.

      Note that the same Collection instance is returned each time this method is called. Use the OrderedMapKeys(LongObjectOrderedMap) constructor for nested or multithreaded iteration.

      Overrides:
      keySet in class LongObjectMap<V>
      Returns:
      a set view of the keys contained in this map
    • values

      public LongObjectMap.Values<V> values()
      Returns a Collection for the values in the map. Remove is supported by the Collection's iterator.

      Note that the same Collection instance is returned each time this method is called. Use the OrderedMapValues(LongObjectOrderedMap) constructor for nested or multithreaded iteration.

      Overrides:
      values in class LongObjectMap<V>
      Returns:
      a Collection of V values
    • entrySet

      public LongObjectMap.Entries<V> entrySet()
      Returns a Set of Map.Entry, containing the entries in the map. Remove is supported by the Set's iterator.

      Note that the same iterator instance is returned each time this method is called. Use the OrderedMapEntries(LongObjectOrderedMap) constructor for nested or multithreaded iteration.

      Overrides:
      entrySet in class LongObjectMap<V>
      Returns:
      a Set of Map.Entry key-value pairs
    • iterator

      public LongObjectMap.EntryIterator<V> iterator()
      Reuses the iterator of the reused LongObjectMap.Entries produced by entrySet(); does not permit nested iteration. Iterate over OrderedMapEntries(LongObjectOrderedMap) if you need nested or multithreaded iteration. You can remove an Entry from this LongObjectOrderedMap using this Iterator.
      Specified by:
      iterator in interface Iterable<V>
      Overrides:
      iterator in class LongObjectMap<V>
      Returns:
      an Iterator over key-value pairs as Map.Entry values
    • appendTo

      public StringBuilder appendTo(StringBuilder sb, String entrySeparator, String keyValueSeparator, boolean braces, LongAppender keyAppender, Appender<V> valueAppender)
      Appends to a StringBuilder from the contents of this LongObjectOrderedMap, but uses the given LongAppender and Appender to convert each key and each value to a customizable representation and append them to a StringBuilder. These functions are often method references to methods in Base, such as Base.appendReadable(CharSequence, long) and Base.appendUnsigned(CharSequence, long). To use the default String representation, you can use LongAppender.DEFAULT as a keyAppender or Appender::append as a valueAppender.
      Overrides:
      appendTo in class LongObjectMap<V>
      Parameters:
      sb - a StringBuilder that this can append to
      entrySeparator - how to separate entries, such as ", "
      keyValueSeparator - how to separate each key from its value, such as "=" or ":"
      braces - true to wrap the output in curly braces, or false to omit them
      keyAppender - a function that takes a StringBuilder and a long, and returns the modified StringBuilder
      valueAppender - a function that takes a StringBuilder and a V, and returns the modified StringBuilder
      Returns:
      sb, with the appended keys and values of this map
    • with

      public static <V> LongObjectOrderedMap<V> with()
      Constructs an empty map given the key type as a generic type argument. This is usually less useful than just using the constructor, but can be handy in some code-generation scenarios when you don't know how many arguments you will have.
      Type Parameters:
      V - the type of values
      Returns:
      a new map containing nothing
    • with

      public static <V> LongObjectOrderedMap<V> with(Number key0, V value0)
      Constructs a single-entry map given one key and one value. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Like the more-argument with(), this will convert its V value to a primitive float, regardless of which Number type was used.
      Type Parameters:
      V - the type of value0
      Parameters:
      key0 - the first and only key; will be converted to primitive long
      value0 - the first and only value
      Returns:
      a new map containing just the entry mapping key0 to value0
    • with

      public static <V> LongObjectOrderedMap<V> with(Number key0, V value0, Number key1, V value1)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Like the more-argument with(), this will convert its V values to primitive floats, regardless of which Number type was used.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a Number key; will be converted to primitive long
      value0 - a V value
      key1 - a Number key; will be converted to primitive long
      value1 - a V value
      Returns:
      a new map containing the given key-value pairs
    • with

      public static <V> LongObjectOrderedMap<V> with(Number key0, V value0, Number key1, V value1, Number key2, V value2)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Like the more-argument with(), this will convert its V values to primitive floats, regardless of which Number type was used.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a Number key; will be converted to primitive long
      value0 - a V value
      key1 - a Number key; will be converted to primitive long
      value1 - a V value
      key2 - a Number key; will be converted to primitive long
      value2 - a V value
      Returns:
      a new map containing the given key-value pairs
    • with

      public static <V> LongObjectOrderedMap<V> with(Number key0, V value0, Number key1, V value1, Number key2, V value2, Number key3, V value3)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Like the more-argument with(), this will convert its V values to primitive floats, regardless of which Number type was used.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a Number key; will be converted to primitive long
      value0 - a V value
      key1 - a Number key; will be converted to primitive long
      value1 - a V value
      key2 - a Number key; will be converted to primitive long
      value2 - a V value
      key3 - a Number key; will be converted to primitive long
      value3 - a V value
      Returns:
      a new map containing the given key-value pairs
    • with

      public static <V> LongObjectOrderedMap<V> with(Number key0, V value0, Object... rest)
      Constructs a map given alternating keys and values. This can be useful in some code-generation scenarios, or when you want to make a map conveniently by-hand and have it populated at the start. You can also use LongObjectOrderedMap(long[], Object[]), which takes all keys and then all values. This needs all keys to have the same type, because it gets a generic type from the first key parameter. All keys must be some type of boxed Number, such as Integer or Double, and will be converted to primitive longs. Any values that don't have V as their type or keys that aren't Numbers have that entry skipped.
      Type Parameters:
      V - the type of values, inferred from value0
      Parameters:
      key0 - the first key; will be converted to primitive long
      value0 - the first value; will be used to determine the type of all values
      rest - a varargs or non-null array of alternating Number, V, Number, V... elements
      Returns:
      a new map containing the given keys and values
    • withPrimitive

      public static <V> LongObjectOrderedMap<V> withPrimitive()
      Constructs an empty map given the key type as a generic type argument. This is usually less useful than just using the constructor, but can be handy in some code-generation scenarios when you don't know how many arguments you will have.
      Type Parameters:
      V - the type of values
      Returns:
      a new map containing nothing
    • withPrimitive

      public static <V> LongObjectOrderedMap<V> withPrimitive(long key0, V value0)
      Constructs a single-entry map given one key and one value. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Unlike with(), this takes unboxed long as its key type, and will not box it.
      Type Parameters:
      V - the type of value0
      Parameters:
      key0 - a long key
      value0 - a V value
      Returns:
      a new map containing just the entry mapping key0 to value0
    • withPrimitive

      public static <V> LongObjectOrderedMap<V> withPrimitive(long key0, V value0, long key1, V value1)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Unlike with(), this takes unboxed long as its key type, and will not box it.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a long key
      value0 - a V value
      key1 - a long key
      value1 - a V value
      Returns:
      a new map containing the given key-value pairs
    • withPrimitive

      public static <V> LongObjectOrderedMap<V> withPrimitive(long key0, V value0, long key1, V value1, long key2, V value2)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Unlike with(), this takes unboxed long as its key type, and will not box it.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a long key
      value0 - a V value
      key1 - a long key
      value1 - a V value
      key2 - a long key
      value2 - a V value
      Returns:
      a new map containing the given key-value pairs
    • withPrimitive

      public static <V> LongObjectOrderedMap<V> withPrimitive(long key0, V value0, long key1, V value1, long key2, V value2, long key3, V value3)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Object, Object...) when there's no "rest" of the keys or values. Unlike with(), this takes unboxed long as its key type, and will not box it.
      Type Parameters:
      V - the type of values
      Parameters:
      key0 - a long key
      value0 - a V value
      key1 - a long key
      value1 - a V value
      key2 - a long key
      value2 - a V value
      key3 - a long key
      value3 - a V value
      Returns:
      a new map containing the given key-value pairs
    • parse

      public static <V> LongObjectOrderedMap<V> parse(String str, String entrySeparator, String keyValueSeparator, PartialParser<V> valueParser)
      Creates a new map by parsing all of str with the given PartialParser for values, with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      Various PartialParser instances are defined as constants, such as PartialParser.DEFAULT_STRING, and others can be created by static methods in PartialParser, such as PartialParser.objectListParser(PartialParser, String, boolean).
      Parameters:
      str - a String containing parseable text
      entrySeparator - the String separating every key-value pair
      keyValueSeparator - the String separating every key from its corresponding value
      valueParser - a PartialParser that returns a V value from a section of str
    • parse

      public static <V> LongObjectOrderedMap<V> parse(String str, String entrySeparator, String keyValueSeparator, PartialParser<V> valueParser, boolean brackets)
      Creates a new map by parsing all of str (or if brackets is true, all but the first and last chars) with the given PartialParser for values, with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      Various PartialParser instances are defined as constants, such as PartialParser.DEFAULT_STRING, and others can be created by static methods in PartialParser, such as PartialParser.objectListParser(PartialParser, String, boolean).
      Parameters:
      str - a String containing parseable text
      entrySeparator - the String separating every key-value pair
      keyValueSeparator - the String separating every key from its corresponding value
      valueParser - a PartialParser that returns a V value from a section of str
      brackets - if true, the first and last chars in str will be ignored
    • parse

      public static <V> LongObjectOrderedMap<V> parse(String str, String entrySeparator, String keyValueSeparator, PartialParser<V> valueParser, int offset, int length)
      Creates a new map by parsing the given subrange of str with the given PartialParser for values, with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      Various PartialParser instances are defined as constants, such as PartialParser.DEFAULT_STRING, and others can be created by static methods in PartialParser, such as PartialParser.objectListParser(PartialParser, String, boolean).
      Parameters:
      str - a String containing parseable text
      entrySeparator - the String separating every key-value pair
      keyValueSeparator - the String separating every key from its corresponding value
      valueParser - a PartialParser that returns a V value from a section of str
      offset - the first position to read parseable text from in str
      length - how many chars to read; -1 is treated as maximum length