Class IntFloatMap

java.lang.Object
com.github.tommyettinger.ds.IntFloatMap
All Implemented Interfaces:
Iterable<IntFloatMap.Entry>
Direct Known Subclasses:
IntFloatOrderedMap

public class IntFloatMap extends Object implements Iterable<IntFloatMap.Entry>
An unordered map where the keys are unboxed ints and the values are unboxed floats. Null keys are not allowed. No allocation is done except when growing the table size.

This class performs fast contains and remove (typically O(1), worst case O(n) but that is rare in practice). 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 ObjectObjectOrderedMap.

You can customize most behavior of this map by extending it. place(int) can be overridden to change how hashCodes are calculated (which can be useful for types like StringBuilder that don't implement hashCode()), and locateKey(int) 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

    • size

      protected int size
    • keyTable

      protected int[] keyTable
    • valueTable

      protected float[] valueTable
    • hasZeroValue

      protected boolean hasZeroValue
    • zeroValue

      protected float zeroValue
    • loadFactor

      protected float loadFactor
      Between 0f (exclusive) and 1f (inclusive, if you're careful), this determines how full the backing tables can get before this increases their size. Larger values use less memory but make the data structure slower.
    • threshold

      protected int threshold
      Precalculated value of (int)(keyTable.length * loadFactor), used to determine when to resize.
    • shift

      protected int shift
      Used by place(int) to bit shift the upper bits of an int into a usable range (>= 0 and <= mask). The shift can be negative, which is convenient to match the number of bits in mask: if mask is a 7-bit number, a shift of -7 shifts the upper 7 bits into the lowest 7 positions. This class sets the shift > 32 and < 64, which when used with an int will still move the upper bits of an int to the lower bits due to Java's implicit modulus on shifts.

      mask can also be used to mask the low bits of a number, which may be faster for some hashcodes, if place(int) is overridden.

    • mask

      protected int mask
      A bitmask used to confine hashcodes to the size of the table. Must be all 1 bits in its low positions, ie a power of two minus 1. If place(int) is overridden, this can be used instead of shift to isolate usable bits of a hash.
    • hashMultiplier

      protected int hashMultiplier
      Used by place(int) to mix hashCode() results. Changes on every call to resize(int) by default. This should always change when shift changes, meaning, when the backing table resizes. This only needs to be serialized if the full key and value tables are serialized, or if the iteration order should be the same before and after serialization. Iteration order is better handled by using IntFloatOrderedMap.
    • entries1

      protected transient IntFloatMap.Entries entries1
    • entries2

      protected transient IntFloatMap.Entries entries2
    • values1

      protected transient IntFloatMap.Values values1
    • values2

      protected transient IntFloatMap.Values values2
    • keys1

      protected transient IntFloatMap.Keys keys1
    • keys2

      protected transient IntFloatMap.Keys keys2
    • defaultValue

      public float defaultValue
  • Constructor Details

    • IntFloatMap

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

      public IntFloatMap(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.
    • IntFloatMap

      public IntFloatMap(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
    • IntFloatMap

      public IntFloatMap(IntFloatMap map)
      Creates a new map identical to the specified map.
      Parameters:
      map - the map to copy
    • IntFloatMap

      public IntFloatMap(int[] keys, float[] 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
    • IntFloatMap

      public IntFloatMap(PrimitiveCollection.OfInt keys, PrimitiveCollection.OfFloat 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

    • putAll

      public void putAll(PrimitiveCollection.OfInt keys, PrimitiveCollection.OfFloat values)
      Given two side-by-side collections, one of keys, one of values, this inserts each pair of key and value into this map with put().
      Parameters:
      keys - a PrimitiveCollection of keys
      values - a PrimitiveCollection of values
    • place

      protected int place(int item)
      Returns an index >= 0 and <= mask for the specified item.
      Parameters:
      item - any int; it is usually mixed or masked here
      Returns:
      an index between 0 and mask (both inclusive)
    • locateKey

      protected int locateKey(int key)
      Returns the index of the key if already present, else ~index for the next empty index. While this can be overridden to compare for equality differently than == between ints, that isn't recommended because this has to treat zero keys differently, and it finds those with ==.
    • put

      public float put(int key, float value)
      Returns the old value associated with the specified key, or this map's defaultValue if there was no prior value.
    • putOrDefault

      public float putOrDefault(int key, float value, float defaultValue)
      Returns the old value associated with the specified key, or the given defaultValue if there was no prior value.
    • putAll

      public void putAll(IntFloatMap 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.
      Parameters:
      map - a map with compatible key and value types; will not be modified
    • putAll

      public void putAll(int[] keys, float[] values)
      Given two side-by-side arrays, one of keys, one of values, this inserts each pair of key and value into this map with put().
      Parameters:
      keys - an array of keys
      values - an array of values
    • putAll

      public void putAll(int[] keys, float[] values, int length)
      Given two side-by-side arrays, one of keys, one of values, this inserts each pair of key and value into this map with put().
      Parameters:
      keys - an array of keys
      values - an array of values
      length - how many items from keys and values to insert, at-most
    • putAll

      public void putAll(int[] keys, int keyOffset, float[] values, int valueOffset, int length)
      Given two side-by-side arrays, one of keys, one of values, this inserts each pair of key and value into this map with put().
      Parameters:
      keys - an array of keys
      keyOffset - the first index in keys to insert
      values - an array of values
      valueOffset - the first index in values to insert
      length - how many items from keys and values to insert, at-most
    • putResize

      protected void putResize(int key, float value)
      Skips checks for existing keys, doesn't increment size.
    • get

      public float get(int key)
      Returns the value for the specified key, or defaultValue if the key is not in the map.
      Parameters:
      key - any int
    • getOrDefault

      public float getOrDefault(int key, float defaultValue)
      Returns the value for the specified key, or the default value if the key is not in the map.
    • getAndIncrement

      public float getAndIncrement(int key, float defaultValue, float increment)
      Returns the key's current value and increments the stored value. If the key is not in the map, defaultValue + increment is put into the map and defaultValue is returned.
    • remove

      public float remove(int key)
    • notEmpty

      public boolean notEmpty()
      Returns true if the map has one or more items.
    • size

      public int size()
      Returns the number of key-value mappings in this map. If the map contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
      Returns:
      the number of key-value mappings in this map
    • isEmpty

      public boolean isEmpty()
      Returns true if the map is empty.
    • getDefaultValue

      public float getDefaultValue()
      Gets the default value, a float which is returned by get(int) if the key is not found. If not changed, the default value is 0.
      Returns:
      the current default value
    • setDefaultValue

      public void setDefaultValue(float defaultValue)
      Sets the default value, a float which is returned by get(int) if the key is not found. If not changed, the default value is 0. Note that getOrDefault(int, float) is also available, which allows specifying a "not-found" value per-call.
      Parameters:
      defaultValue - may be any float; should usually be one that doesn't occur as a typical value
    • shrink

      public void shrink(int maximumCapacity)
      Reduces the size of the backing arrays to be the specified capacity / loadFactor, or less. If the capacity is already less, nothing is done. If the map contains more items than the specified capacity, the next highest power of two capacity is used instead.
    • clear

      public void clear(int maximumCapacity)
      Clears the map and reduces the size of the backing arrays to be the specified capacity / loadFactor, if they are larger.
    • clear

      public void clear()
    • containsKey

      public boolean containsKey(int key)
    • containsValue

      public boolean containsValue(float value)
      Returns true if the specified value is in the map. Note this traverses the entire map and compares every value, which may be an expensive operation.
      Parameters:
      value - the float value to check for; will be compared by exact bits, not float equality
      Returns:
      true if this map contains the given value, false otherwise
    • containsValue

      public boolean containsValue(float value, float tolerance)
      Returns true if the specified value is in the map. Note this traverses the entire map and compares every value, which may be an expensive operation.
      Parameters:
      value - the float value to check for; will be compared with Utilities.isEqual(float, float, float)
      tolerance - how much the given value is permitted to differ from a value in this while being considered equal
      Returns:
      true if this map contains the given value, false otherwise
    • findKey

      public int findKey(float value, int defaultKey)
      Returns the key for the specified value, or defaultKey if it is not in the map. Note this traverses the entire map and compares every value, which may be an expensive operation. Uses Utilities.isEqual(float, float) to compare values.
      Parameters:
      value - the value to look for
      defaultKey - if the given value is not found, this will be returned
      Returns:
      the key associated with the given value, if it was found, or defaultKey otherwise
    • findKey

      public int findKey(float value, int defaultKey, float tolerance)
      Returns the key for the specified value, or defaultKey if it is not in the map. Note this traverses the entire map and compares every value, which may be an expensive operation. Uses Utilities.isEqual(float, float, float) to compare values.
      Parameters:
      value - the value to look for
      defaultKey - if the given value is not found, this will be returned
      tolerance - how much the given value is permitted to differ from a value in this while being considered equal
      Returns:
      the key associated with the given value, if it was found, or defaultKey otherwise
    • 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.
    • resize

      protected void resize(int newSize)
    • getHashMultiplier

      public int getHashMultiplier()
      Gets the current hashMultiplier, used in place(int) to mix hash codes. If setHashMultiplier(int) is never called, the hashMultiplier will always be drawn from Utilities.GOOD_MULTIPLIERS, with the index equal to 64 - shift.
      Returns:
      the current hashMultiplier
    • setHashMultiplier

      public void setHashMultiplier(int hashMultiplier)
      Sets the hashMultiplier to the given int, which will be made odd if even and always negative (by OR-ing with 0x80000001). This can be any negative, odd int, but should almost always be drawn from Utilities.GOOD_MULTIPLIERS or something like it.
      Parameters:
      hashMultiplier - any int; will be made odd if even.
    • getTableSize

      public int getTableSize()
      Gets the length of the internal array used to store all keys, as well as empty space awaiting more items to be entered. This length is equal to the length of the array used to store all values, and empty space for values, here. This is also called the capacity.
      Returns:
      the length of the internal array that holds all keys
    • getLoadFactor

      public float getLoadFactor()
    • setLoadFactor

      public void setLoadFactor(float loadFactor)
    • hashCode

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

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • toString

      public String toString(String entrySeparator)
      Delegates to toString(String, boolean) with the given entrySeparator and without braces. This is different from toString(), which includes braces by default.
      Parameters:
      entrySeparator - how to separate entries, such as ", "
      Returns:
      a new String representing this map
    • toString

      public String toString(String entrySeparator, boolean braces)
    • toString

      public String toString(String entrySeparator, String keyValueSeparator, boolean braces, IntAppender keyAppender, FloatAppender valueAppender)
      Makes a String from the contents of this IntFloatMap, but uses the given IntAppender and FloatAppender to convert each key and each value to a customizable representation and append them to a temporary StringBuilder. These functions are often method references to methods in Base, such as Base.appendReadable(CharSequence, int) and Base.appendFriendly(CharSequence, float). To use the default String representation, you can use IntAppender.DEFAULT or FloatAppender.DEFAULT as an appender. To write values so that they can be read back as Java source code, use IntAppender.READABLE or FloatAppender.READABLE for each appender.
      Using READABLE appenders, if you separate keys from values with ", " and also separate entries with ", ", that allows the output to be copied into source code that calls with(Number, Number, Number...) (if braces is false).
      Parameters:
      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 an int, and returns the modified StringBuilder
      valueAppender - a function that takes a StringBuilder and a float, and returns the modified StringBuilder
      Returns:
      a new String representing this map
    • appendTo

      public StringBuilder appendTo(StringBuilder sb, String entrySeparator, boolean braces)
    • appendTo

      public StringBuilder appendTo(StringBuilder sb, String entrySeparator, String keyValueSeparator, boolean braces, IntAppender keyAppender, FloatAppender valueAppender)
      Appends to a StringBuilder from the contents of this IntFloatMap, but uses the given IntAppender and FloatAppender 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, int) and Base.appendFriendly(CharSequence, float). To use the default String representation, you can use IntAppender.DEFAULT or FloatAppender.DEFAULT as an appender. To write values so that they can be read back as Java source code, use IntAppender.READABLE or FloatAppender.READABLE for each appender.
      Using READABLE appenders, if you separate keys from values with ", " and also separate entries with ", ", that allows the output to be copied into source code that calls with(Number, Number, Number...) (if braces is false).
      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 an int, and returns the modified StringBuilder
      valueAppender - a function that takes a StringBuilder and a float, and returns the modified StringBuilder
      Returns:
      sb, with the appended keys and values of this map
    • forEach

      public void forEach(com.github.tommyettinger.function.IntFloatBiConsumer action)
      Performs the given action for each entry in this map until all entries have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of entry set iteration (if an iteration order is specified.) Exceptions thrown by the action are relayed to the caller.
      Parameters:
      action - The action to be performed for each entry
    • replaceAll

      public void replaceAll(com.github.tommyettinger.function.IntFloatToFloatBiFunction function)
      Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception. Exceptions thrown by the function are relayed to the caller.
      Parameters:
      function - the function to apply to each entry
    • 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. This indiscriminately removes items from the backing array until the requested newSize is reached, or until the full backing array has had its elements removed.
      This tries to remove from the end of the iteration order, but because the iteration order is not guaranteed by an unordered map, this can remove essentially any item(s) from the map if it is larger than newSize.
      Parameters:
      newSize - the target size to try to reach by removing items, if smaller than the current size
    • iterator

      public IntFloatMap.EntryIterator iterator()
      Reuses the iterator of the reused IntFloatMap.Entries produced by entrySet(); does not permit nested iteration. Iterate over Entries(IntFloatMap) if you need nested or multithreaded iteration. You can remove an Entry from this IntFloatMap using this Iterator.
      Specified by:
      iterator in interface Iterable<IntFloatMap.Entry>
      Returns:
      an Iterator over IntFloatMap.Entry key-value pairs; remove is supported.
    • keySet

      public IntFloatMap.Keys keySet()
      Returns a PrimitiveCollection.OfInt that acts as 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() operation. It does not support the add, addAll, remove, removeAll, or clear operations.

      Note that the same Collection instance is returned each time this method is called. Use the IntFloatMap.Keys constructor for nested or multithreaded iteration.

      Returns:
      a set view of the keys contained in this map
    • values

      public IntFloatMap.Values values()
      Returns a PrimitiveCollection.OfFloat of the values in the map. Note that the same PrimitiveCollection instance is returned each time this method is called. Use the IntFloatMap.Values constructor for nested or multithreaded iteration.
      Returns:
      a PrimitiveCollection.OfFloat containing float values
    • entrySet

      public IntFloatMap.Entries entrySet()
      Returns a Set of 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 IntFloatMap.Entries constructor for nested or multithreaded iteration.
      Returns:
      a Set of IntFloatMap.Entry key-value pairs
    • putIfAbsent

      public float putIfAbsent(int key, float value)
    • replace

      public boolean replace(int key, float oldValue, float newValue)
    • replace

      public float replace(int key, float value)
    • computeIfAbsent

      public float computeIfAbsent(int key, com.github.tommyettinger.function.IntToFloatFunction mappingFunction)
    • remove

      public boolean remove(int key, float value)
    • combine

      public float combine(int key, float value, com.github.tommyettinger.function.FloatFloatToFloatBiFunction remappingFunction)
      Just like Map's merge() default method, but this doesn't use Java 8 APIs (so it should work on RoboVM), this uses primitive values, and this won't remove entries if the remappingFunction returns null (because that isn't possible with primitive types). This uses a functional interface from Funderby.
      Parameters:
      key - key with which the resulting value is to be associated
      value - the value to be merged with the existing value associated with the key or, if no existing value is associated with the key, to be associated with the key
      remappingFunction - given a float from this and the float value, this should return what float to use
      Returns:
      the value now associated with key
    • combine

      public void combine(IntFloatMap other, com.github.tommyettinger.function.FloatFloatToFloatBiFunction remappingFunction)
      Simply calls combine(int, float, FloatFloatToFloatBiFunction) on this map using every key-value pair in other. If other isn't empty, calling this will probably modify this map, though this depends on the remappingFunction.
      Parameters:
      other - a non-null IntFloatMap (or subclass) with a compatible key type
      remappingFunction - given a float value from this and a value from other, this should return what float to use
    • with

      public static IntFloatMap with()
      Constructs an empty map. 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.
      Returns:
      a new map containing nothing
    • with

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

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

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

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

      public static IntFloatMap with(Number key0, Number value0, Number... 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 IntFloatMap(int[], float[]), which takes all keys and then all values. This needs all keys to be some kind of (boxed) Number, and converts them to primitive ints. It also needs all values to be a (boxed) Number, and converts them to primitive floats. Any keys or values that aren't Numbers have that entry skipped.
      Parameters:
      key0 - the first key; will be converted to a primitive int
      value0 - the first value; will be converted to a primitive float
      rest - an array or varargs of Number elements
      Returns:
      a new map containing the given key-value pairs
    • putPairs

      public void putPairs(Number... pairs)
      Attempts to put alternating key-value pairs into this map, drawing a key, then a value from pairs, then another key, another value, and so on until another pair cannot be drawn. All keys and values must be some type of boxed Number, such as Integer or Double, and will be converted to primitive ints and floats.
      If any item in pairs cannot be cast to the appropriate Number type for its position in the arguments, that pair is ignored and neither that key nor value is put into the map. If any key is null, that pair is ignored, as well. If pairs is a Number array that is null, the entire call to putPairs() is ignored. If the length of pairs is odd, the last item (which will be unpaired) is ignored.
      Parameters:
      pairs - an array or varargs of Number elements
    • putLegible

      public void putLegible(String str)
      Adds items to this map drawn from the result of toString(String) or appendTo(StringBuilder, String, boolean). Every key-value pair should be separated by ", ", and every key should be followed by "=" before the value (which toString() does). Each item can vary significantly in length, and should use Base.BASE10 digits, which should be human-readable. Any brackets inside the given range of characters will ruin the parsing, so increase offset by 1 and reduce length by 2 if the original String had brackets added to it.
      Parameters:
      str - a String containing BASE10 chars
    • putLegible

      public void putLegible(String str, String entrySeparator)
      Adds items to this map drawn from the result of toString(String) or appendTo(StringBuilder, String, boolean). Every key-value pair should be separated by entrySeparator, and every key should be followed by "=" before the value (which toString(String) does). Each item can vary significantly in length, and should use Base.BASE10 digits, which should be human-readable. Any brackets inside the given range of characters will ruin the parsing, so increase offset by 1 and reduce length by 2 if the original String had brackets added to it.
      Parameters:
      str - a String containing BASE10 chars
      entrySeparator - the String separating every key-value pair
    • putLegible

      public void putLegible(String str, String entrySeparator, String keyValueSeparator)
      Adds items to this map drawn from the result of toString(String) or appendTo(StringBuilder, String, String, boolean, IntAppender, FloatAppender). Each item can vary significantly in length, and should use Base.BASE10 digits, which should be human-readable. Any brackets inside the given range of characters will ruin the parsing, so increase offset by 1 and reduce length by 2 if the original String had brackets added to it.
      Parameters:
      str - a String containing BASE10 chars
      entrySeparator - the String separating every key-value pair
      keyValueSeparator - the String separating every key from its corresponding value
    • putLegible

      public void putLegible(String str, String entrySeparator, String keyValueSeparator, int offset, int length)
      Puts key-value pairs into this map drawn from the result of toString(String) or appendTo(StringBuilder, String, String, boolean, IntAppender, FloatAppender). Each item can vary significantly in length, and should use Base.BASE10 digits, which should be human-readable. Any brackets inside the given range of characters will ruin the parsing, so increase offset by 1 and reduce length by 2 if the original String had brackets added to it.
      Parameters:
      str - a String containing BASE10 chars
      entrySeparator - the String separating every key-value pair
      keyValueSeparator - the String separating every key from its corresponding value
      offset - the first position to read BASE10 chars from in str
      length - how many chars to read; -1 is treated as maximum length
    • withPrimitive

      public static IntFloatMap withPrimitive()
      Constructs an empty map. 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.
      Returns:
      a new map containing nothing
    • withPrimitive

      public static IntFloatMap withPrimitive(int key0, float value0)
      Constructs a single-entry map given one key and one value. This is mostly useful as an optimization for with(Number, Number, Number...) when there's no "rest" of the keys or values. Unlike the vararg with(), this doesn't box its arguments into Number items.
      Parameters:
      key0 - the first and only key
      value0 - the first and only value
      Returns:
      a new map containing just the entry mapping key0 to value0
    • withPrimitive

      public static IntFloatMap withPrimitive(int key0, float value0, int key1, float value1)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Number, Number...) when there's no "rest" of the keys or values. Unlike the vararg with(), this doesn't box its arguments into Number items.
      Parameters:
      key0 - a int key
      value0 - a float value
      key1 - a int key
      value1 - a float value
      Returns:
      a new map containing the given key-value pairs
    • withPrimitive

      public static IntFloatMap withPrimitive(int key0, float value0, int key1, float value1, int key2, float value2)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Number, Number...) when there's no "rest" of the keys or values. Unlike the vararg with(), this doesn't box its arguments into Number items.
      Parameters:
      key0 - a int key
      value0 - a float value
      key1 - a int key
      value1 - a float value
      key2 - a int key
      value2 - a float value
      Returns:
      a new map containing the given key-value pairs
    • withPrimitive

      public static IntFloatMap withPrimitive(int key0, float value0, int key1, float value1, int key2, float value2, int key3, float value3)
      Constructs a map given alternating keys and values. This is mostly useful as an optimization for with(Number, Number, Number...) when there's no "rest" of the keys or values. Unlike the vararg with(), this doesn't box its arguments into Number items.
      Parameters:
      key0 - a int key
      value0 - a float value
      key1 - a int key
      value1 - a float value
      key2 - a int key
      value2 - a float value
      key3 - a int key
      value3 - a float value
      Returns:
      a new map containing the given key-value pairs
    • parse

      public static IntFloatMap parse(String str, String entrySeparator, String keyValueSeparator)
      Creates a new map by parsing all of str, with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      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
    • parse

      public static IntFloatMap parse(String str, String entrySeparator, String keyValueSeparator, boolean brackets)
      Creates a new map by parsing all of str (or if brackets is true, all but the first and last chars), with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      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
      brackets - if true, the first and last chars in str will be ignored
    • parse

      public static IntFloatMap parse(String str, String entrySeparator, String keyValueSeparator, int offset, int length)
      Creates a new map by parsing the given subrange of str, with entries separated by entrySeparator, such as ", " and the keys separated from values by keyValueSeparator, such as "=".
      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
      offset - the first position to read parseable text from in str
      length - how many chars to read; -1 is treated as maximum length