Some collections need to maintain specialized information. In these cases, you might introduce a special type for the collection. For example, suppose you're creating a checkbook program that needs to track a number of transactions. You could maintain an array or Vector of these, but a set of transactions really represent a whole account. Now, other objects can maintain a reference to Account instead of to a bunch of Transactions.
Account can use whatever collection method is most appropriate.
The good side of a specialized object is that it creates a meaningful new object where we can attach behavior. It's more work than creating a generic collection, though. Composite A list of items may suffice for a long time, but you may eventually need a more complex structure. Suppose you have a set of products, and someone chooses at most one of each, maintained in a list of current orders. Then we have products containing products.