>>170
>質問1
はい。

ただし、例えば以下のようなことをしたい場合は、containsやaddがそれぞれ単体で同期されてても
間に割り込まれる可能性があるので、全体をsynchronizedで囲まないと望む結果にはならない。

if ( list.contains(x) == false ) list.add(x);

>質問2
はい。

どのみち、iterator、hasNext、nextをそれぞれ単体で同期したところで、
間にaddが割り込まれたらConcurrentModificationExceptionが起きるから、使い物にならないと思う。

ところで、CopyOnWriteArrayListという便利なものもあるよ。
状況によってはおすすめ。