Chapter 8. Collections
Hierarchy is basic to what we do as programmers. We build large programs by breaking them
into interacting pieces that are each smaller and simpler than the whole program. We break
those pieces into still smaller and simpler parts, until we get to something small enough and
simple enough to be understood and implemented. In the same way, we build up the inform-
ation in a program by collecting together information. Bits are assembled into bytes and se-
quences of bytes that can be interpreted as characters, numbers, or strings. We group this data
together with some code to make objects, the basic piece of abstraction in object-oriented pro-
gramming languages such as Java. But we don't stop there; we collect objects together in oth-
er objects, building more and more complex structures.
Not long ago much of a programmer's time was spent in building up these larger structures.
If you wanted a list of some kind of object, you built your own list. If you wanted a set, you
built a set. Much of the basic curriculum of a computer science education was (and, in many
places, still is) given over to teaching how to build such data structures.
The Java environment, fortunately, frees programmers from this level of building. The Java
libraries contain a selection of implementations of collections that include nearly any grouping
mechanism one might need. This collections library, found in the package java.util , can
save a programmer so much time and effort that it is definitely worth including in the good
parts of the language. However, though it is a great time and effort saver, it also has some
quirks that need to be known. So we will now turn our attention to the collections.
We have already mentioned a place where the Java collections will prove useful. Remember
in Chapter 7 when we were talking about putting groups of players together into a team? We
didn't actually formalize this notion in any code, so I will turn to that task now. The first thing
to do is to decide what the interface to such a Team might look like. As a first candidate, I will
propose something along the lines of: