Using collections in Java: sets
A List such as an ArrayList is useful in cases where we want to
store some arbitrary large group of objects in a fixed order, and possibly refer to
those objects by their position in the list. But a list is not so good for another
type of problem where:
- we don't necessarily care about ordering;
- we don't care about the number of times that an object is in the collection;
- we just want to know if a given object is in the collection or not.
A collection in which an object may be "present or not" (but not present
multiple times) is called a set.
Why use a set?
It may have occurred to you that you could use a plain old list for the above
purpose. After all, List has a contains() method to see if a
given object is in the list, and to preserve the present-or-not condition, we could
just check before adding if the given object was already in the list, and if so
not add it again. So what's the point of a "set"?
The point is simply efficiency:
If your only necessary criterion is present or
not and you don't need the extra functionality of a list (such as ordering,
being able to retrieve the nth item), then it is possible to
use a more efficient data structure.
That's generally what Java's set implementations do.
Next: introducing the HashSet
On the next page, we look at how to use a Java set,
with the introduction of the HashSet class.