A Map implementation that grows to a fixed size and then retains only a fixed number of the highest (largest) keys. : Map « Collections Data Structure « Java






A Map implementation that grows to a fixed size and then retains only a fixed number of the highest (largest) keys.

      

/*
 * Copyright 2009 David Jurgens
 *
 * This file is part of the S-Space package and is covered under the terms and
 * conditions therein.
 *
 * The S-Space package is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation and distributed hereunder to you.
 *
 * THIS SOFTWARE IS PROVIDED "AS IS" AND NO REPRESENTATIONS OR WARRANTIES,
 * EXPRESS OR IMPLIED ARE MADE.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, WE MAKE
 * NO REPRESENTATIONS OR WARRANTIES OF MERCHANT- ABILITY OR FITNESS FOR ANY
 * PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE OR DOCUMENTATION
 * WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
 * RIGHTS.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

//package edu.ucla.sspace.util;

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

/**
 * A {@code Map} implementation that grows to a fixed size and then retains only
 * a fixed number of the highest (largest) keys.  All keys used in this class
 * must implements {@link Comparable}.
 *
 * @see BoundedSortedMultiMap
 */
public class BoundedSortedMap<K,V> extends TreeMap<K,V> {

    private static final long serialVersionUID = 1;

    /**
     * The maximum number of mappings to retain.
     */
    private final int bound;
    
    /**
     * Creatins an instance that will only retain the specified number of the
     * largest (highest) keys.
     *
     * @param bound the number of mappings to retain
     */
    public BoundedSortedMap(int bound) {
  this(bound, true);
    }

    /**
     * Creatins an instance that will only retain the specified number of keys,
     * where the largest (highest) keys.
     *
     * @param bound the number of mappings to retain
     * @param retainHighest {@code true} if the highest elements are to be
     *        retained, {@code false} if the lowest keys are to be retained
     */
    public BoundedSortedMap(int bound, boolean retainHighest) {
  super(((retainHighest) ? null : new ReverseComparator<K>()));
  this.bound = bound;
    }

    /**
     * Adds the key-value mapping to this map, and if the total number of
     * mappings exceeds the bounds, removes either the currently lowest element,
     * or if reversed, the currently highest element.
     *
     * @param key {@inheritDoc}
     * @param value {@inheritDoc}
     */
    public V put(K key, V value) {
  V old = super.put(key, value);
  if (size() > bound) {
      remove(firstKey());
  }
  return old;
    }

    /**
     * Adds all of the key-value mapping to this map, and if the total number of
     * mappings exceeds the bounds, removes mappings until the size is within
     * bounds.
     *
     * @param m {@inheritDoc}
     */
    public void putAll(Map<? extends K,? extends V> m) {
  for (Map.Entry<? extends K,? extends V> e : m.entrySet()) {
      put(e.getKey(), e.getValue());
  }
    }

    /**
     * A comparator that results in the opposite ordering of the natural
     * ordering from {@link Comparator#compareTo(Object,Object) compareTo}.
     */
    static final class ReverseComparator<K> 
            implements Comparator<K>, java.io.Serializable {

        private static final long serialVersionUID = 1;
  
  // Assume that if the comparator is being used that the objects are
  // instances of Comparable
  @SuppressWarnings("unchecked")
  public int compare(K c1, K c2) {
      return -(((Comparable)c1).compareTo(c2));
  }
    }
}

   
    
    
    
    
    
  








Related examples in the same category

1.Creating and storing arrays in a map
2.Sort based on the values
3.Get a key from value with an HashMap
4.Retrieve environment variables (JDK1.5)
5.Creating a Type-Specific Map: creates a map whose keys are Integer objects and values are String objects.
6.A map declared to hold objects of a type T can also hold objects that extend from T
7.A value retrieved from a type-specific collection does not need to be casted
8.Map techniques.
9.Create an array containing the keys in a map
10.Create an array containing the values in a map
11.Creating a Hash Table
12.Creating a Map That Retains Order-of-Insertion
13.Automatically Removing an Unreferenced Element from a Hash Table
14.Creating a Type-Specific Map [5.0]
15.Use Iterator to loop through the HashMap class
16.Create type specific collections
17.Convert Properties into Map
18.A java.util.Map implementation using reference values
19.Utility method that return a String representation of a map. The elements will be represented as "key = value"
20.Utility method that return a String representation of a map. The elements will be represented as "key = value" (tab)
21.This program demonstrates the use of a map with key type String and value type Employee
22.Format a Map
23.A Map implementation that dumps its content when memory runs low.
24.A Map that stores the values in files within a directory.
25.Map List
26.Multi Value Map Array List
27.Multi Value Map Linked HashSet
28.An object that maps keys to values, and values back to keys.
29.LRU Map
30.A map acts like array.
31.Order Retaining Map
32.BinaryMap class implements a map from objects to integer objects where the only value is the integer with value 1.
33.A space-optimized map for associating char keys with values.
34.Class which creates mapping between keys and a list of values.
35.A map of values by class.
36.History Map
37.Sorts map by values in ascending order.
38.Map from a given key to a list of values
39.Map from a given key to a set of values
40.Class which keeps a set of values and assigns each value a unique positive index.
41.Array Map
42.Array map
43.An ArrayMap is a very inefficient map type that is more robust in dealing with changes to its keys than other maps.
44.This Map stores it's keys as strings in upper case, null and duplicate keys are not allowed
45.Map to string
46.A simple class that stores key Strings as char[]'s in a hash table.