|
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 구현이 제공됩니다.
5 개(살)의 새로운 BlockingQueue 구현이 제공되어 그 모든 것은 java.util.concurrent 의 일부입니다.
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 유틸리티 클래스에 추가되었습니다.
Arrays 유틸리티 클래스는, 모든 형태의 배열에 대한, 컨텐츠 베이스의 hashCode 및 toString 메소드에 장비 되었습니다. 이러한 메소드는 기존의 equals 메소드를 보완합니다. 상자의 (다차원인) 배열의 조작을 실시하기 위해서(때문에), 3 개의 메소드의 버젼이 제공됩니다. 그것들은,deepEquals ,deepHashCode , 및 deepToString 입니다. 임의의 배열의 내용을 용이하게 출력할 수 있습니다. 「평탄한」배열을 출력하는 코드를 다음에 나타냅니다.
System.out.println(Arrays.toString(a));
상자의 (다차원인) 배열을 출력하는 코드를 다음에 나타냅니다.
System.out.println(Arrays.deepToString(a));
Boolean 는,Comparable 를 구현하기 위해서 개량되었습니다.