====== Java Collection ====== * [[http://www.eclipse.org/collections/|Eclipse Collections]] * [[https://www.baeldung.com/java-collection-remove-elements|Removing Elements from Java Collections | Baeldung]] * [[http://dveamer.github.io/backend/JavaConcurrentCollections.html|Java Thread Safe Collections - List, Queue, Set, Map]] * [[https://www.baeldung.com/java-synchronized-collections|An Introduction to Synchronized Java Collections | Baeldung]] * [[java:guava|Guava]] ===== Set ===== ==== Concurrent Set ==== * 동시접근이 필요한 Set 은 두가지 방식으로 만들 수 있다. * [[http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#synchronizedSet%28java.util.Set%29|java.util.Collections#synchronizedSet(java.util.Set)]] : 동기화된 Set 객체를 리턴한다. 하지만 **모든 요청을 ''synchronized''로 처리해서 성능이 떨어진다.** * [[http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Sets.html#newConcurrentHashSet%28%29|com.google.common.collect.Sets#newConcurrentHashSet()]] : [[http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html|ConcurrentHashMap]]을 이용해 동기화된 Set을 생성한다. 성능상 더 유리하다고 한다. // 동기화된 Set 생성 원리 Set concurrentSet = Collections.newSetFromMap(new ConcurrentHashMap()); ===== List ===== ==== CopyOnWriteArrayList ==== * [[https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html|CopyOnWriteArrayList]] * ''synchronized'' 없이 멀티 쓰레드에서 안전하게 작동하는 List. * iteration을 돌 때 가지고 있던 내용을 복제하여, 다른 쓰레드로 인한 변경 영향을 받지 않게 한다. * 성능이 떨어진다. * [[https://www.baeldung.com/java-copy-on-write-arraylist|Guide to CopyOnWriteArrayList | Baeldung]] ==== Guava Partition List ==== * [[https://www.baeldung.com/java-list-split|Partition a List in Java | Baeldung]]