Вы хотите быть осторожным при использовании CopyOnWriteArrayList. Типичная коллекция (в очень широком масштабе) - это 80%, читает 19%, пишет и 1% удаляет. CopyOnWriteArraylist работает плохо в этих условиях. Лучшее использование CopyOnWriteArrayList - когда чтение составляет ~ 90-95%. Слишком большая запись приведет к значительному снижению производительности (класс вызывает исключение UnsupportedOperationException при вызове compareTo, так как сортировка Collections.sort на нем ужасна).
В основном, если вы делаете ALOT из операций чтения и мало операций записи, CopyOnWriteArrayList - это фантастика, хотя если вы этого не делаете, вы можете рассмотреть Collections.synchronizedList. Если вы хотите обеспечить неблокирующее чтение, тогда, очевидно, подойдет CopyOnWriteArrayList.
ConcurrentHashMap отлично подходит для замены любой вашей реализации карты (по крайней мере, не отсортированной). Он не будет блокировать чтение и блокировать только определенные сегменты при записи, поэтому он очень быстрый.