Class DoubleBag
- All Implemented Interfaces:
Serializable
,Cloneable
,Indexed
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:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
add
(double obj) boolean
addAll
(double[] other) boolean
addAll
(int index, double[] other) boolean
boolean
void
clear()
Removes all numbers in the DoubleBag.clone()
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
copyIntoArray
(int fromStart, double[] to, int toStart, int len) Copies 'len' elements from the Bag into the provided array.void
fill
(double o) Replaces all elements in the bag with the provided object.double
get
(int index) 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 DoubleBagdouble
set
(int index, double element) 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 DoubleBagvoid
Shuffles (randomizes the order of) the DoubleBagint
size()
void
sort()
Sorts the doubles into ascending numerical order.double[]
toArray()
Double[]
double
top()
Returns 0 if the DoubleBag is empty, else returns the topmost double.
-
Field Details
-
objs
public double[] objs -
numObjs
public int numObjs
-
-
Constructor Details
-
DoubleBag
public DoubleBag(int capacity) Creates a DoubleBag with a given initial capacity. -
DoubleBag
public DoubleBag() -
DoubleBag
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. If the Other DoubleBag is null, a new empty DoubleBag is created. -
DoubleBag
public DoubleBag(double[] other) Creates a DoubleBag with the given elements. If the Other array is null, a new empty DoubleBag is created.
-
-
Method Details
-
size
public int size() -
isEmpty
public boolean isEmpty() -
addAll
public boolean addAll(double[] other) -
addAll
public boolean addAll(int index, double[] other) -
addAll
-
addAll
-
clone
- Overrides:
clone
in classObject
- Throws:
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
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. -
set
public double set(int index, double element) -
setValue
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(...) -
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
Shuffles (randomizes the order of) the DoubleBag -
shuffle
Shuffles (randomizes the order of) the DoubleBag -
reverse
public void reverse()Reverses order of the elements in the DoubleBag -
clear
public void clear()Removes all numbers in the DoubleBag. This is done by clearing the internal array but not replacing it with a new, smaller one. -
copyIntoArray
public void copyIntoArray(int fromStart, double[] to, int toStart, int len) Copies 'len' elements from the Bag into the provided array. The 'len' elements start at index 'fromStart' in the Bag, and are copied into the provided array starting at 'toStat'. -
toArray
public double[] toArray() -
toDoubleArray
-
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 interfaceIndexed
-