Class OrderedHashMap<K,V>

java.lang.Object
dev.ultreon.mods.exitconfirmation.OrderedHashMap<K,V>
All Implemented Interfaces:
Externalizable, Serializable, Cloneable, Map<K,V>

public class OrderedHashMap<K,V> extends Object implements Map<K,V>, Cloneable, Externalizable
A map of objects whose mapping entries are sequenced based on the order in which they were added. This data structure has fast O(1) search time, deletion time, and insertion time.

Although this map is sequenced, it cannot implement Listbecause of incompatible interface definitions. The remove methods in List and Map have different return values (see: List.remove(Object)and Map.remove(Object)).

This class is not thread safe. When a thread safe implementation is required, use Collections.synchronizedMap(Map) as it is documented, or use explicit synchronization controls.
Since:
2.0
See Also:
  • Constructor Details

    • OrderedHashMap

      public OrderedHashMap()
      Construct a new sequenced hash map with default initial size and load factor.
    • OrderedHashMap

      public OrderedHashMap(int initialSize)
      Construct a new sequenced hash map with the specified initial size and default load factor.
      Parameters:
      initialSize - the initial size for the hash table
      See Also:
    • OrderedHashMap

      public OrderedHashMap(int initialSize, float loadFactor)
      Construct a new sequenced hash map with the specified initial size and load factor.
      Parameters:
      initialSize - the initial size for the hash table
      loadFactor - the load factor for the hash table.
      See Also:
    • OrderedHashMap

      public OrderedHashMap(Map<K,V> m)
      Construct a new sequenced hash map and add all the elements in the specified map. The order in which the mappings in the specified map are added is defined by putAll(Map).
  • Method Details

    • size

      public int size()
      Implements Map.size().
      Specified by:
      size in interface Map<K,V>
    • isEmpty

      public boolean isEmpty()
      Implements Map.isEmpty().
      Specified by:
      isEmpty in interface Map<K,V>
    • containsKey

      public boolean containsKey(Object key)
      Specified by:
      containsKey in interface Map<K,V>
    • containsValue

      public boolean containsValue(Object value)
      Specified by:
      containsValue in interface Map<K,V>
    • get

      public V get(Object o)
      Implements Map.get(Object).
      Specified by:
      get in interface Map<K,V>
      Parameters:
      o -
    • getFirst

      public Map.Entry<K,V> getFirst()
      Return the entry for the "oldest" mapping. That is, return the Map.Entry for the key-value pair that was first put into the map when compared to all the other pairings in the map. This behavior is equivalent to using entrySet().iterator().next(), but this method provides an optimized implementation.
      Returns:
      The first entry in the sequence, or null if the map is empty.
    • getFirstKey

      public Object getFirstKey()
      Return the key for the "oldest" mapping. That is, return the key for the mapping that was first put into the map when compared to all the other objects in the map. This behavior is equivalent to using getFirst().getKey(), but this method provides a slightly optimized implementation.
      Returns:
      The first key in the sequence, or null if the map is empty.
    • getFirstValue

      public Object getFirstValue()
      Return the value for the "oldest" mapping. That is, return the value for the mapping that was first put into the map when compared to all the other objects in the map. This behavior is equivalent to using getFirst().getValue(), but this method provides a slightly optimized implementation.
      Returns:
      The first value in the sequence, or null if the map is empty.
    • getLast

      public Map.Entry<K,V> getLast()
      Return the entry for the "newest" mapping. That is, return the Map.Entry for the key-value pair that was first put into the map when compared to all the other pairings in the map. The behavior is equivalent to:

       Object obj = null;
       Iterator iter = entrySet().iterator();
       while (iter.hasNext()) {
           obj = iter.next();
       }
       return (Map.Entry) obj;
       


      However, the implementation of this method ensures an O(1) lookup of the last key rather than O(n).
      Returns:
      The last entry in the sequence, or null if the map is empty.
    • getLastKey

      public Object getLastKey()
      Return the key for the "newest" mapping. That is, return the key for the mapping that was last put into the map when compared to all the other objects in the map. This behavior is equivalent to using getLast().getKey(), but this method provides a slightly optimized implementation.
      Returns:
      The last key in the sequence, or null if the map is empty.
    • getLastValue

      public Object getLastValue()
      Return the value for the "newest" mapping. That is, return the value for the mapping that was last put into the map when compared to all the other objects in the map. This behavior is equivalent to using getLast().getValue(), but this method provides a slightly optimized implementation.
      Returns:
      The last value in the sequence, or null if the map is empty.
    • put

      public V put(K key, V value)
      Specified by:
      put in interface Map<K,V>
    • remove

      public V remove(Object key)
      Implements Map.remove(Object).
      Specified by:
      remove in interface Map<K,V>
      Parameters:
      key -
    • putAll

      public void putAll(Map<? extends K,? extends V> t)
      Adds all the mappings in the specified map to this map, replacing any mappings that already exist (as per Map.putAll(Map)). The order in which the entries are added is determined by the iterator returned from Map.entrySet()for the specified map.
      Specified by:
      putAll in interface Map<K,V>
      Parameters:
      t - the mappings that should be added to this map.
      Throws:
      NullPointerException - if t is null
    • clear

      public void clear()
      Implements Map.clear().
      Specified by:
      clear in interface Map<K,V>
    • equals

      public boolean equals(Object obj)
      Implements Map.equals(Object).
      Specified by:
      equals in interface Map<K,V>
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Implements Map.hashCode().
      Specified by:
      hashCode in interface Map<K,V>
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Provides a string representation of the entries within the map. The format of the returned string may change with different releases, so this method is suitable for debugging purposes only. If a specific format is required, use entrySet().iterator()and iterate over the entries in the map formatting them as appropriate.
      Overrides:
      toString in class Object
    • keySet

      @NotNull public @NotNull Set<K> keySet()
      Implements Map.keySet().
      Specified by:
      keySet in interface Map<K,V>
    • values

      @NotNull public @NotNull Collection<V> values()
      Implements Map.values().
      Specified by:
      values in interface Map<K,V>
    • entrySet

      @NotNull public @NotNull Set<Map.Entry<K,V>> entrySet()
      Implements Map.entrySet().
      Specified by:
      entrySet in interface Map<K,V>
      Returns:
    • clone

      public OrderedHashMap<K,V> clone() throws CloneNotSupportedException
      Creates a shallow copy of this object, preserving the internal structure by copying only references. The keys and values themselves are not clone() 'd. The cloned object maintains the same sequence.
      Overrides:
      clone in class Object
      Returns:
      A clone of this instance.
      Throws:
      CloneNotSupportedException - if clone is not supported by a subclass.
    • get

      public Object get(int index)
      Returns the key at the specified index.
      Throws:
      ArrayIndexOutOfBoundsException - if the index is < 0 or > the size of the map.
    • getValue

      public Object getValue(int index)
      Returns the value at the specified index.
      Throws:
      ArrayIndexOutOfBoundsException - if the index is < 0 or > the size of the map.
    • indexOf

      public int indexOf(K key)
      Returns the index of the specified key.
    • iterator

      public Iterator<K> iterator()
      Returns a key iterator.
    • lastIndexOf

      public int lastIndexOf(K key)
      Returns the last index of the specified key.
    • sequence

      public List<K> sequence()
      Returns a List view of the keys rather than a set view. The returned list is unmodifiable. This is required because changes to the values of the list (using ListIterator.set(Object)) will effectively remove the value from the list and reinsert that value at the end of the list, which is an unexpected side effect of changing the value of a list. This occurs because changing the key, changes when the mapping is added to the map and thus where it appears in the list.

      An alternative to this method is to use keySet()

      Returns:
      The ordered list of keys.
      See Also:
    • remove

      public Object remove(int index)
      Removes the element at the specified index.
      Parameters:
      index - The index of the object to remove.
      Returns:
      The previous value corresponding the key, or null if none existed.
      Throws:
      ArrayIndexOutOfBoundsException - if the index is < 0 or > the size of the map.
    • readExternal

      public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException, ClassCastException
      Deserializes this map from the given stream.
      Specified by:
      readExternal in interface Externalizable
      Parameters:
      in - the stream to deserialize from
      Throws:
      IOException - if the stream raises it
      ClassNotFoundException - if the stream raises it
      ClassCastException
    • writeExternal

      public void writeExternal(ObjectOutput out) throws IOException
      Serializes this map to the given stream.
      Specified by:
      writeExternal in interface Externalizable
      Parameters:
      out - the stream to serialize to
      Throws:
      IOException - if the stream raises it