본문 바로가기

자바의 정석 정리

자바의 정석 - 11.13 Collections

11.13.1 Collections

  • Arrays가 배열과 관련된 메서드를 제공하는 것처럼, Collections는 컬렉션과 관련된 메서드를 제공함

11.13.2 컬렉션의 동기화

  • 멀티 쓰레드(Multi-Thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성(Consistency)을 위해 공유되는 객체에 동기화(Syncronization)가 필요함
  • Vector와 HashMap과 같은 구버전의 클래스는 자체적으로 동기화 처리가 되어 있는데, 멀티 쓰레드 프로그래밍이 아닌 경우 불필요한 기능이 되어 성능 저하 요인이 됨
  • 새로 추가된 ArrayList와 HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 java.util.Collections클래스의 동기화 메서드를 이용해서 동기화처리가 가능하도록 변경하고 있음
  • static Collection synchronizedCollection(Collection c) static List synchronizedList(List list) static Set synchronizedSet(Set s) static Map synchronizedMap(Map a) static SortedSet synchronizedSortedSet(SortedSet s) static SortedMap synchronizedSortedMap(SortedMap m) // 예시 List syncList = Collections.synchronizedList(new ArrayList(...));

11.13.3 변경불가 컬렉션 만들기

  • 컬렉션에 저장된 데터를 보호하기 위해서 읽기전용으로 만들 때 사용함
static Collection unmodifiableColection(Collection c)
static List unmodifiableList(List list)
static Set unmodifiableSet(Set s)
static Map unmodifiableMap(Map m)
static NavigableSet unmodifiableNavigableSet(Nvigable s)
static SortedSet unmodifiableSortedSet(Sorted s)
static NavigableMap unmodifiableNavigableMap(NavigableMap m)
static SortedMap unmodifiableSortedMAp(SortedMap m)

11.13.4 싱글톤 컬렉션 만들기

  • 단 하나의 객체만 저장하는 컬렉션을 만들고 싶을 때 사용함
static List singletonList(Object o)
static Set singleton(Object o) // singletonSet이 아님
static Map singletonMap(Object key, Obect value)

11.13.54 한 종류의 객체만 저장하는 컬렉션 만들기

  • 컬렉션에 모든 종류의 객체를 저장할 수 있음
  • 하지만, 단 한 가지의 지정된 종루의 객체만 저장하도록 제한하고 싶을 때 사용
static Collection checkedCollection(Collection c, Class type)
static List checkedList(List list, Class type)
static Set checkedSet(Set s, Class type)
static Map checkedMap(Map m, Class keyType, class valueType)
static Queue checkedQueue(Queue queue, Class type)
static NavigableSet checkedNavigableSet(NavigableSet s, Class Type)
static SortedSet checkedSortedSet(SortedSet s, Class type)
static NavigableMap checkedNavigableMap(NavigableMap m , Class keyType, class valueType)
static SortedMap checkedSortedMap(SortedMap m, Class keyType, class valueType)

// 예시
List list  = new ArrayList();
List checkedList = checkedList(list, String.class);
checkedList.add("abc");
checkedList.add(new Integer(3)); // ClassCastException 발생