A collection is an object that contains other objects and provides methods for working on the objects it contains. A collection can consist of the same types of objects, but can contain objects of different types too.
This lesson adapts the RMIClient2 program from Part 2, Lesson 2: User Interfaces Revisited to use the Collections application programming interface (API) to maintain and print a list of unique customer IDs. The customer IDs are all objects of type String
and represent the same type of information, a customer ID. You could, however, have a collection object that contains objects of type String
, Integer
, and Double
if it makes sense in your application.
The Collection classes available to use in programs implement Collection interfaces. Interfaces are abstract data types that let collections be manipulated independently of their representation details. There are three primary types of collection interfaces: List
, Set
, and Map
. This lesson focuses on the List
and Set
collections.
Set
implementations do not permit duplicate elements, but List
implementations do. Duplicate elements have the same data type and value. For example, two customer IDs of type String
containing the value Zelda are duplicate; whereas, an element of type String
containing the value 1 and an element of type Integer
containing the value 1 are not duplicate.
The API provides two general-purpose Set
implementations. HashSet
, which stores its elements in a hash table, and TreeSet
, which stores its elements in a balanced binary tree called a red-black tree. The example for this lesson uses the HashSet
implementation because it currently has the best performance.
This diagram shows the Collection interfaces on the right and the class hierarchy for the java.util.HashSet
on the left. You can see that the HashSet
class implements the Set
interface.
This example adapts the RMIClient2.java class to collect customer IDs in a Set
and print the list of customer IDs whenever the View
button is clicked.
The collection object is a Set
so if the same customer enters multiple orders, there is only one element for that customer in the list of customer IDs. If the program tries to add an element that is the same as an element already in the set, the second element is simply not added. No error is thrown and there is nothing you have to do in your code.
The RMIClient2.actionPerformed method calls the addCustomer
method to add a customer ID to the set when the order processor clicks the View
button.
The addCustomer
method shown below adds the customer ID to the set and prints a notice that the customer ID has been added.
//Create list of customer IDs
public void addCustomer(String custID){
s.add(custID);
System.out.println("Customer ID added");
}
The print
method is called from the RMIClient2.actionPerformed method when the order processor clicks the View
button. The print
method prints the elements currently in the set to the command line.
Note: A HashSet
does not guarantee the order of the elements in the set. Elements are printed in the order they occur in the set, but that order is not necessarily the same as the order in which the elements were placed in the set.
To traverse the set, an object of type Iterator
is returned from the set. The Iterator
object has a hasNext
method that lets you test if there is another element in the set, a next
that lets you move over the elements in the set, and a remove
method that lets you remove an element.
The example print method shows two ways to print the set. The first way uses an iterator and the second way simply calls System.out.println
on the set. In the iterator approach, the element returned by the next
method is printed to the command line until there are no more elements in the set.
//Print customer IDs
public void print(){
//Iterator approach
if(s.size()!=0){
Iterator it = s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//Call System.out.println on the set
System.out.println(s);
}else{
System.out.println("No customer IDs available");
}
}
You can find more information on Collections in the Collections trail in The Java Tutorial.