JDK 5 에서의 Collections Framework 에 대한 변경의 개요 - xrath.com 에서 번역됨

# Collections Framework 의 확장 기능

이 페이지에서는, JDK 버젼 5 의 collections framework 의 확장 기능에 대해 설명합니다.

다음의 3 개의 새로운 언어 기능이 collections framework 를 비약적으로 확장합니다.

- 총칭성 - 컴파일시의 형태 보증이 collections framework 에 추가되어 컬렉션으로부터 요소를 읽어들일 때 캐스트가 불요
- 루프에 대한 확장 - 컬렉션상에서 대화하는 경우에, 명시적인 반복자가 불요
- 오토 박싱/언 박싱 - 컬렉션에 삽입하는 경우에, 프리미티브(primitive) 클래스 (`int` 등)를 래퍼 클래스 (`Integer` 등)에 자동적으로 변환해, 컬렉션으로부터 읽어내는 경우에 래퍼 클래스의 인스턴스를 프리미티브(primitive) 클래스로 변환한다

3 개(살)의 새로운 컬렉션 인터페이스가 제공됩니다.

- `Queue` - 처리를 실시하기 전에 요소를 보관 유지하기 위해서 설계된 컬렉션. 기본적인 `Collection` 조작 뿐만이 아니라, 큐는 추가적인 삽입, 예외 처리 및 검사라고 하는 조작을 제공한다
- `BlockingQueue` - 요소를 꺼낼 때, 큐를 비우지 않기 위해(때문에) 대기하도록(듯이) `Queue` 를 확장한다. 또, 요소를 포함할 경우에 큐로 이용 가능하게 되는 영역을 대기한다 (이 인터페이스는, 새로운 `java.util.concurrent` 패키지의 일부가 된다)
- `ConcurrentMap` - 기본 메소드,`putIfAbsent`,`remove`, 및 `replace` 를 사용하는, 확장 `Map` (이 인터페이스는,`java.util.concurrent` 패키지의 일부가 된다)

2 개(살)의 새로운 구상 `Queue` 구현이 제공됩니다. 1 개의 기존의 `List` 구현이 `Queue` 를 구현하기 위해서 개량되어 1 개의 추상 `Queue` 구현이 제공됩니다. ``

- `PriorityQueue` - heap에 근거하는 안 바운드 형식의 우선도 큐
- `ConcurrentLinkedQueue` - 링크 노드에 근거하는 안 바운드 형식에서 thread 세이프인 FIFO (선입선출) 큐 (이 클래스는 `java.util.concurrent` 의 일부).
- `LinkedList` - `Queue` 인터페이스를 구현하기 위해서 개량. `Queue` 인터페이스를 개입시켜 액세스 되었을 경우,`LinkedList` 는 FIFO 큐로서 동작한다
- `AbstractQueue` - `Queue` 의 스켈리턴 구현

5 개(살)의 새로운 `BlockingQueue` 구현이 제공되어 그 모든 것은 `java.util.concurrent` 의 일부입니다.

- `LinkedBlockingQueue` - 링크 노드에 근거하는 임의의 바운드 형식의 FIFO 블로킹 큐
- `ArrayBlockingQueue` - 배열에 근거하는 바운드 형식의 FIFO 블로킹 큐
- `PriorityBlockingQueue` - heap에 근거하는 안 바운드 형식의 블로킹 우선도 큐
- `DelayQueue` - heap에 근거하는 시간 베이스의 스케줄링 큐
- `SynchronousQueue` - `BlockingQueue` 인터페이스를 이용하는 간단한 인식 메카니즘

1 개의`ConcurrentMap` 구현이 제공됩니다.

- `ConcurrentHashMap` - 해시 테이블에 근거하는, 고도로 병렬화 된 고성능인 `ConcurrentMap` 구현. 이 구현은 취득을 실행할 경우에 블록 하지 않고, 클라이언트가 갱신하는 동시성 처리의 레벨의 선택을 허가한다. 이것은,`Hashtable` 에 대한 드롭 인식의 치환으로서 상정되었다. `ConcurrentMap` 를 구현하는 것에 가세해,`Hashtable` 에 고유의 모든 「유산」메소드를 지원한다

특수 목적의 `List` 및 `Set` 구현은, read 조작이 기입해 조작보다 훨씬 많아, 반복이 동기 할 수 없는, 또는 해야 하는 것이 아닌 경우에 사용합니다.

- `CopyOnWriteArrayList` - 배열에 근거하는 `List` 구현. 모든 추이적 조작 (`add`,`set` 및 `remove` 등)은, 배열의 새로운 카피의 작성에 의해 구현된다. 반복 그 중에서 동기는 불필요하고, 반복자는 `ConcurrentModificationException` 를 throw 하지 않는 것이 보증된다. 이 구현은 이벤트 핸들러 리스트의 유지에 최적 (변경이 보기 드물어, traversal는 빈번하게 발생해, 시간이 걸릴 가능성이 있기 (위해)때문에)
- `CopyOnWriteArraySet` - copy-on-write 배열에 근거하는 `Set` 구현. 이 구현은 `CopyOnWriteArrayList` 와 본질적으로 같습니다. 다른 대부분의 `Set` 구현과 달리,`add`,`remove`, 및 `contains` 메소드는 세트의 사이즈 에 비례하는 타임이 필요. 이 구현은, 중복을 회피할 필요가 있는 이벤트 핸들러 리스트의 유지에 최적

특수 목적의 `Set` 및 `Map` 구현은, 열거형과 함께 사용합니다.

- `EnumSet` - bit-vector 를 기로 하는 고성능의 `Set` 구현. 각 `EnumSet` 인스턴스의 모든 요소는, 단일의 열거형의 요소가 아니면 안된다
- `EnumMap` - 배열을 기로 하는 고성능의 `Map` 구현. 각 `EnumMap` 인스턴스의 모든 키는 단일의 열거형의 요소가 아니면 안된다

새로운 래퍼 구현의 패밀리가 제공되어 주로 일반적인 컬렉션과 함께 사용됩니다.

- `Collections.checkedInterface` - 지정된 컬렉션의 동적형 보증 뷰를 돌려주어, 클라이언트가 잘못한 형태의 요소를 추가하려고 했을 경우 `ClassCastException` 를 throw 합니다. 언어에 있는 총칭의 기구에 의해 컴파일시에 정적인 형태 체크를 합니다만, 이 기구를 무효화하는 일도 가능. 동적형 보증 뷰는 이 가능성을 완전하게 해결한다

3 개(살)의 새로운 범용 알고리즘과 1 개의 Comparator 컨버터가 `Collections` 유틸리티 클래스에 추가되었습니다.

- ``frequency(Collection<? > c, Object o)`` - 있는 컬렉션에 대해 지정된 요소가 발생한 회수를 계산한다
- `disjoint(Collection<? > c1, Collection<? > c2)` - 2 개의 컬렉션이 서로 무관계하다, 즉 공통의 요소를 포함하지 않는지 어떤지를 판정한다
- `addAll(Collection<? super T> c, T... a)` - 지정된 배열의 모든 요소를 지정한 컬렉션에 추가하는 편리한 메소드
- `Comparator<T> reverseOrder(Comparator<T> cmp)` - 지정된 Comparator의 역의 순서의 Comparator를 돌려준다

`Arrays` 유틸리티 클래스는, 모든 형태의 배열에 대한, 컨텐츠 베이스의 `hashCode` 및 `toString` 메소드에 장비 되었습니다. 이러한 메소드는 기존의 `equals` 메소드를 보완합니다. 상자의 (다차원인) 배열의 조작을 실시하기 위해서(때문에), 3 개의 메소드의 버젼이 제공됩니다. 그것들은,`deepEquals` ,`deepHashCode` , 및 `deepToString` 입니다. 임의의 배열의 내용을 용이하게 출력할 수 있습니다. 「평탄한」배열을 출력하는 코드를 다음에 나타냅니다.

        System.out.println(Arrays.toString(a));

상자의 (다차원인) 배열을 출력하는 코드를 다음에 나타냅니다.

        System.out.println(Arrays.deepToString(a));

`Boolean` 는,`Comparable` 를 구현하기 위해서 개량되었습니다.

Copyright © 2006 Sun Microsystems, Inc. All Rights Reserved. 코멘트의 송부처:collections-comments@java.sun.com | Java Software