sim.util
Class DoubleBag

java.lang.Object
  extended by sim.util.DoubleBag
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Indexed

public class DoubleBag
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable, Indexed

Maintains a simple array (objs) of doubles and the number of doubles (numObjs) in the array (the array can be bigger than this number). You are encouraged to access the doubles directly; they are stored in positions [0 ... numObjs-1]. If you wish to extend the array, you should call the resize method.

DoubleBag is approximately to double what Bag is to Object. However, for obvious reasons, DoubleBag is not a java.util.Collection subclass and is purposely simple (it doesn't have an Iterator for example).

DoubleBag is not synchronized, and so should not be accessed from different threads without locking on it or some appropriate lock double first. DoubleBag also has an unusual, fast method for removing doubles called remove(...), which removes the double simply by swapping the topmost double into its place. This means that after remove(...) is called, the DoubleBag may no longer have the same order (hence the reason it's called a "DoubleBag" rather than some variant on "Vector" or "Array" or "List"). You can guarantee order by calling removeNondestructively(...) instead if you wish, but this is O(n) in the worst case.

See Also:
Serialized Form

Field Summary
 int numObjs
           
 double[] objs
           
 
Constructor Summary
DoubleBag()
           
DoubleBag(DoubleBag other)
          Adds the doubles from the other DoubleBag without copying them.
DoubleBag(int capacity)
          Creates a DoubleBag with a given initial capacity.
 
Method Summary
 boolean add(double obj)
           
 boolean addAll(DoubleBag other)
           
 boolean addAll(int index, double[] other)
           
 boolean addAll(int index, DoubleBag other)
           
 void clear()
           
 java.lang.Object clone()
           
 java.lang.Class componentType()
          Should return the base component type for this Indexed object, or null if the component type should be queried via getValue(index).getClass.getComponentType()
 boolean contains(double o)
           
 void fill(double o)
          Replaces all elements in the bag with the provided object.
 double get(int index)
           
 java.lang.Object getValue(int index)
          Throws an IndexOutOfBoundsException if index is inappropriate.
 boolean isEmpty()
           
 double pop()
          Returns 0 if the DoubleBag is empty, else removes and returns the topmost double.
 boolean push(double obj)
          Synonym for add(obj) -- try to use add instead unless you want to think of the DoubleBag as a stack.
 double remove(int index)
          Removes the double at the given index, moving the topmost double into its position.
 double removeNondestructively(int index)
          Removes the double at the given index, shifting the other doubles down.
 void resize(int toAtLeast)
           
 void reverse()
          Reverses order of the elements in the DoubleBag
 double set(int index, double element)
           
 java.lang.Object setValue(int index, java.lang.Object value)
          Throws an IndexOutOfBoundsException if index is inappropriate, and IllegalArgumentException if the value is inappropriate.
 void shrink(int desiredLength)
          Resizes the objs array to max(numObjs, desiredLength), unless that value is greater than or equal to objs.length, in which case no resizing is done (this operation only shrinks -- use resize() instead).
 void shuffle(MersenneTwisterFast random)
          Shuffles (randomizes the order of) the DoubleBag
 void shuffle(java.util.Random random)
          Shuffles (randomizes the order of) the DoubleBag
 int size()
           
 void sort()
          Sorts the doubles into ascending numerical order.
protected  void throwIndexOutOfBoundsException(int index)
           
 double[] toArray()
           
 double top()
          Returns 0 if the DoubleBag is empty, else returns the topmost double.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

objs

public double[] objs

numObjs

public int numObjs
Constructor Detail

DoubleBag

public DoubleBag(int capacity)
Creates a DoubleBag with a given initial capacity.


DoubleBag

public DoubleBag()

DoubleBag

public DoubleBag(DoubleBag other)
Adds the doubles from the other DoubleBag without copying them. The size of the new DoubleBag is the minimum necessary size to hold the doubles.

Method Detail

size

public int size()
Specified by:
size in interface Indexed

isEmpty

public boolean isEmpty()

addAll

public boolean addAll(int index,
                      double[] other)

addAll

public boolean addAll(DoubleBag other)

addAll

public boolean addAll(int index,
                      DoubleBag other)

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Overrides:
clone in class java.lang.Object
Throws:
java.lang.CloneNotSupportedException

resize

public void resize(int toAtLeast)

shrink

public void shrink(int desiredLength)
Resizes the objs array to max(numObjs, desiredLength), unless that value is greater than or equal to objs.length, in which case no resizing is done (this operation only shrinks -- use resize() instead). This is an O(n) operation, so use it sparingly.


top

public double top()
Returns 0 if the DoubleBag is empty, else returns the topmost double.


pop

public double pop()
Returns 0 if the DoubleBag is empty, else removes and returns the topmost double.


push

public boolean push(double obj)
Synonym for add(obj) -- try to use add instead unless you want to think of the DoubleBag as a stack.


add

public boolean add(double obj)

contains

public boolean contains(double o)

get

public double get(int index)

getValue

public java.lang.Object getValue(int index)
Description copied from interface: Indexed
Throws an IndexOutOfBoundsException if index is inappropriate. Not called get() because this would conflict with get() methods in IntBag etc. which don't return objects.

Specified by:
getValue in interface Indexed

set

public double set(int index,
                  double element)

setValue

public java.lang.Object setValue(int index,
                                 java.lang.Object value)
Description copied from interface: Indexed
Throws an IndexOutOfBoundsException if index is inappropriate, and IllegalArgumentException if the value is inappropriate. Not called set() in order to be consistent with getValue(...)

Specified by:
setValue in interface Indexed

removeNondestructively

public double removeNondestructively(int index)
Removes the double at the given index, shifting the other doubles down.


remove

public double remove(int index)
Removes the double at the given index, moving the topmost double into its position.


sort

public void sort()
Sorts the doubles into ascending numerical order.


fill

public void fill(double o)
Replaces all elements in the bag with the provided object.


shuffle

public void shuffle(java.util.Random random)
Shuffles (randomizes the order of) the DoubleBag


shuffle

public void shuffle(MersenneTwisterFast random)
Shuffles (randomizes the order of) the DoubleBag


reverse

public void reverse()
Reverses order of the elements in the DoubleBag


throwIndexOutOfBoundsException

protected void throwIndexOutOfBoundsException(int index)

clear

public void clear()

toArray

public double[] toArray()

componentType

public java.lang.Class componentType()
Description copied from interface: Indexed
Should return the base component type for this Indexed object, or null if the component type should be queried via getValue(index).getClass.getComponentType()

Specified by:
componentType in interface Indexed