JDK 1.2 introduces a new framework for collections of objects, called the Java Collections Framework.
• It dramatically increases the readability of your collections by providing a standard set of interfaces to be used by many programmers in many applications.
• It makes your code more flexible by allowing you to pass and return interfaces instead of concrete classes, generalizing your code rather than locking it down.
• It offers many specific implementations of the interfaces, allowing you to choose the collection that is most fitting and offers the highest performance for your needs.
And that’s just for starters.
Our tour of the framework will begin with an overview of the advantages it provides for storing sets of objects.
The Java Collections advantage: An overview
Before Collections made its most welcome debut, the standard methods for grouping Java objects were via the array, the Vector, and the Hashtable. All three of these collections have different methods and syntax for accessing members – arrays use the square bracket () symbols, Vector uses the elementAt(), and Hash table uses get and put methods. These differences have long led programmers down the path to inconsistency in implementing their own collections – some emulate the Vector access methods and some emulate the Enumeration interface.
To further complicate matters, most of the Vector methods are marked as final; that is, you cannot extend the Vector class to implement a similar sort of collection. We could create a collection class that looked like a Vector and acted like a Vector, but it couldn’t be passed to a method that takes a Vector as a parameter.
Finally none of the collections (array, Vector or Hashtable) implements a standard member access interface. As programmers developed algorithms (like sorts) to manipulate collections,a heated discourse erupted on what object to pass to the algorithm.Should you pass an array or a Vector? Should you implement both interfaces? Talk about duplication and confusion.
Thankfully, the Java Collections Framework remedies these problems and offers a number of advantages over using no framework or using the Vector and Hashtable.
A usable set of collection interfaces
By implementing one of the basic interfaces – Collection,Set,List,or Map -you ensure your class conforms to a common API and becomes more regular and easily understood. So,whether you are implementing an SQL database, a color swatch matcher, or a remote chat application, if you implement the Collection interface, the operations on your collection of objects are well-known to your users. The standard interfaces also simplify the passing and returning of collections to and from class methods and allow the methods to work on a wider variety of collections.
A basic set of collection implementations
In addition to the trusty Hashtable and Vector, which have been updated to implement the Collection interfaces, new collection implementations have been added, including HashSet and TreeSet, ArrayList and LinkedList, and HashMap and Map. Using an existing, common implementation makes your code shorter and quicker to download. Also, using existing Core Java code core ensures that any improvements to the base code will also improve the performance of your code.
Other useful enhancements
Each collection now returns an Iterator, an improved type of Enumeration that allows element operations such as insertion and deletion. The Iterator is “fail-fast,” which means you get an exception if the list you’re iterating is changed by another user.Also, list-based collections such as Vector return a ListIterator that allow bi-directional iteration and updating.
Several collections (TreeSet and TreeMap) implicitly support ordering. Use these classes to maintain a sorted list with no effort. You can find the smallest and largest elements or perform a binary search to improve the performance of large lists. You can sort other collections by providing a collection-compare method (a Comparator object) or an object-compare method (the Comparable interface).
Finally,a static class Collections provides unmodifiable (read-only) and synchronized versions of existing collections.The unmodifiable classes are helpful to prevent unwanted changes to a collection. The synchronized version of a collection is a necessity for multithreaded programs.