The synchronized block is necessary if you want to do a sequence of operations while excluding other threads that want to access that same collection. Without the synchronized block, other threads could call the methods of the collection while you were iterating over it -- adding or removing objects, leading to incorrect results or errors.
If it weren't a synchronized collection, then that synchronized block would not stop other threads from calling the methods of the collection. [ July 04, 2005: Message edited by: Ernest Friedman-Hill ]
I rarely have been able to use synchronized collections. Its rare that you will syynchronize ONLY addition or removal from a collection. Even then I like to use synchronized blocks so its obvious when/where I am synchronizing.