2012-05-08 6 views
3

Vector 및 ArrayDeque 클래스 간의 차이점은 무엇입니까? 어제 ArrayDeque 클래스에 대해 읽었으며, 전에 Vector 클래스를 사용했습니다.Vector 및 ArrayDeque 클래스

답변

4

몇 가지 차이점 :의 ArrayDeque는 Queue 인터페이스를 구현하는 반면

  • 벡터, List 인터페이스를 구현합니다. 이러한 작업의 다른 세트를 제공하는 다른 인터페이스이다 : 그것은 등등 poll, offer 등의 방법이 있기 때문에 *Queue는 멀티 스레드 애플리케이션 (생산자/소비자 패턴)을 향해 더 지향되는 반면, 벡터, 당신의 바닐라 컨테이너입니다;
  • 벡터 스레드 안전 (내장 된 동기화 기능이 있음) ArrayDeque는 스레드로부터 안전하지 않습니다.
  • 벡터 버전 1.6 이후의 ArrayDeque, 버전 1.0 이후 JDK에 포함되어 있습니다.
9

기본 사항은 다음과

Vector 요소에 인덱스 기반 액세스를 허용하는 용기를 정의 java.util.List을 구현한다. 또한 interface RandomAccess을 구현하여 기본 표현이 요소에 대한 빠른 액세스 (일반적으로 O(1))를 허용한다는 것을 사용자에게 나타냅니다.

ArrayDeque은 컨테이너의 시작과 끝 부분에서 빠른 요소 추가 및 제거를 지원하는 컨테이너를 정의합니다.

주요 차이점 :

  • VectorList.add(int index, E element) 또는 List.addAll(int index, Collection<? extends E> c)의 오버로드 된 버전을 사용하여, 용기의 중간에 요소를 추가 지원한다.

  • Vectorremove 메서드를 사용하여 컨테이너 가운데에서 요소를 제거 할 수 있습니다.

  • VectorsetsetElementAt 방법은 당신이 현재 위치에서 요소 스왑 (다른 하나와 Vector에서 하나의 객체, O(1) 작업을 대체) 할 수 있습니다.

  • 의 끝 부분은 상각 된 상수 시간입니다. 벡터의 처음이나 중간에 추가하는 것은 선형 시간 연산 (O(n))입니다.

  • ArrayDeque은 컨테이너의 전후방에 요소를 추가/삭제하는 상각 시간 (O(1))을 상각했다.

  • ArrayDeque

  • 은 특별히 컨테이너의 특정 위치에 요소를 제거 할 수 없습니다. 클래스의 다양한 remove, removeFirstremoveLast 방법은 약간 더 제한 요소를 제거 할 수 있습니다.
  • ArrayDeque

    큐 (peek, poll, add, addFirst) 같은 클래스를 사용하는 방법으로하고 스택 (offer, push, pop, peekLast, addLast)처럼 제공하거나이있다 따라서 왜 모두 (추천 Double-Ended Queue).

  • ArrayDeque은 양면 큐의 중간에 요소를 추가 할 수 없습니다.

  • Vector에는 특수한이 있으며 컨테이너의 특정 위치에서 시작하는 반복기를 가져올 수 있으며 요소 추가, 제거 및 설정을 지원합니다. ArrayDeque의 반복기는 이러한 추가 메서드를 지원하지 않습니다.

  • Vector은 동기화 컨테이너입니다. 즉, 이미 멀티 스레드 환경에서 동기화/잠금을 수행하는 코드가 포함되어 있습니다. ArrayDeque의 경우 컨테이너에 대한 다중 스레드 액세스를 수행하는 경우 자체 동기화 코드를 제공해야합니다. ArrayListVector과 비 동기화 된 카운터입니다.