Java Collections have been extended in two directions.
Queue
, BlockingQueue
, ConcurrentMap
, Delayed
.
PriorityQueue
, ConcurrentLinkedQueue
,
ArrayBlockingQueue
, LinkedBlockingQueue
,
PriorityBlockingQueue
, DelayQueue
, SynchronousQueue
,
ConcurrentHashMap
, and maybe others.
The concurrent collections can be executed by more than one thread without blocking! In other words, they don't have the performance cost of the synchronized classes. See John Zukowski's article at http://www-106.ibm.com/developerworks/java/library/j-tiger06164.html for an overview of these new structures.
// Typical Collections usage before Java 5
List greetings = new ArrayList();
greetings.add("We come in peace.");
greetings.add("Take me to your leader.");
greetings.add("Resistance is futile.");
Iterator it = greetings.iterator();
while (it.hasNext()) {
String aGreeting = (String)it.next();
attemptCommunication(aGreeting);
}
Java 5 let's you specify the type of element in the collection. This has two nice consequences:
// Same example using generics. List<String> greetings = new ArrayList<String>(); greetings.add("We come in peace."); greetings.add("Take me to your leader."); greetings.add("Resistance is futile."); Iterator<String> it = greetings.iterator(); while (it.hasNext()) { String aGreeting = it.next(); // No downcast. attemptCommunication(aGreeting);
There are no notes here yet, but if you already have some idea of what they are, this article (Talking Tiger, generically speaking) has some nice explanations of what's available.
Sun also has a tutorial on generics at java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf. It's not a great article, but you might find something useful here.
A discussion of generics in Java, C++, and C# is at www.artima.com/intv/generics.html