All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object | +----COM.objectspace.jgl.OrderedSet | +----COM.objectspace.jgl.OrderedMultiSet
An OrderedMultiSet is a container that is optimized for fast associative lookup. Items are matched using equals(). When an item is inserted into a OrderedMultiSet, it is stored in a data structure that allows the item to be found very quickly. Within the data structure, the items are ordered according to a comparator object. By default, the comparator is a HashComparator that orders objects based on their hash value. An OrderedMultiSet may contain matching items.
OrderedMultiSets are useful when fast associate lookup is important and when index-based lookup is unnecessary.
Strictly speaking, there is no reason why null is not a valid entry. However, most comparators (including the default HashComparator) will fail and throw an exception if you attempt to add a null entry because they cast the entry to a class and then activate one of its methods. It is perfectly possible to hand-craft a comparator that will accept null as a valid key.
There are many different approaches that could be used to implementing an associative container. For example, most of the older libraries used a hashing scheme for positioning and retrieving items. This implementation use a data structure called a red-black tree. A red-black tree is a binary search tree that uses an extra field in every node to store the node's color. Red-black trees constrain the way that nodes may be colored in such a way that the tree remains reasonably balanced. This property is important for ensuring a good overall performance - red-black trees guarantee that the worst case performance for the most common dynamic set operations is O(log N). One conseqence of using a binary tree for storage of data is that the items remain in a sorted order. This allows JGL users to iterate through an associative container and access its elements in a sequenced manner.
Insertion does not affect iterators or references.
Removal only invalidates the iterators and references to the removed elements.
public OrderedMultiSet()
public OrderedMultiSet(BinaryPredicate comparator)
public OrderedMultiSet(OrderedMultiSet set)
public synchronized Object clone()
public synchronized void copy(OrderedMultiSet set)
public synchronized String toString()
public boolean equals(Object object)
public synchronized boolean equals(OrderedMultiSet set)
public synchronized void swap(OrderedMultiSet set)
All Packages Class Hierarchy This Package Previous Next Index