deque java deque implementation
이 자습서에서는 Java로 된 Deque 또는 'Double-ended Queue'에 대한 자세한 설명을 제공합니다. Deque 인터페이스, API 메서드, 구현 등에 대해 배웁니다.
Deque 또는 Java의 'double-ended queue'는 양쪽 끝에서 요소를 삽입하거나 삭제할 수있는 데이터 구조입니다. deque는 java.util 패키지에 속하는 Java 인터페이스로 java.queue 인터페이스를 구현합니다.
deque를 스택 (Last In, First Out) 구조 또는 대기열 (선입 선출)로 구현할 수 있습니다. Deque는 Stack 및 / 또는 LinkedList보다 빠릅니다. Deque는 '카드 갑판'에서와 같이 '갑판'으로 발음됩니다.
=> 여기에서 Java 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.
학습 내용 :
자바에 대해
일반적인 deque 컬렉션은 다음과 같습니다.
테스트 계획과 테스트 전략의 차이점은 무엇입니까
Deque는 주로 스택, 큐 또는 목록 데이터 구조를 구현하는 데 사용됩니다. 또한 우선 순위 대기열을 구현하는 데 사용할 수도 있습니다. 대부분 웹 브라우저에있는 실행 취소 또는 기록 기능은 deques를 사용하여 구현할 수 있습니다.
Java Deque 인터페이스
아래 다이어그램은 양방향 대기열 또는 deque의 계층 구조를 보여줍니다. 아래 다이어그램에 표시된대로 Deque 인터페이스는 Queue 인터페이스로 확장되어 Collection 인터페이스를 확장합니다.
프로그램에서 deque 인터페이스를 사용하려면 아래와 같이 import 문을 사용하여 deque 기능이있는 패키지를 가져와야합니다.
import java.util.deque;
또는
import java.util.*;
deque는 인터페이스이므로 deque 인터페이스의 기능을 구현하려면 구체적인 클래스가 필요합니다.
아래 두 클래스는 deque 인터페이스를 구현합니다.
- ArrayDeque
- LinkedList
따라서 아래와 같이 두 클래스를 사용하여 deque 객체를 만들 수 있습니다.
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
따라서 위의 deque 객체가 성공적으로 생성되면 deque 인터페이스의 기능을 사용할 수 있습니다.
다음은 deque에 대해 주목해야 할 몇 가지 중요한 사항입니다.
- Deque 인터페이스는 필요에 따라 확장 할 수있는 크기 조정 가능한 어레이를 지원합니다.
- 배열 deques는 Null 값의 사용을 허용하지 않습니다.
- Deque는 둘 이상의 스레드에 의한 동시 액세스를 지원하지 않습니다.
- Deque는 외부 동기화가 제공되지 않는 한 스레드로부터 안전하지 않습니다.
Java의 ArrayDeque
ArrayDeque는 java.util 패키지에 속합니다. deque 인터페이스를 구현합니다. 내부적으로 ArrayDeque 클래스는 요소 수가 증가함에 따라 증가하는 동적 크기 조정 가능한 배열을 사용합니다.
아래 다이어그램은 ArrayDeque 클래스의 계층 구조를 보여줍니다.
다이어그램에 표시된대로 ArrayDeque 클래스는 AbstractCollection 클래스를 상속하고 Deque 인터페이스를 구현합니다.
소프트웨어 엔지니어링의 수명주기 모델
아래와 같이 ArrayDeque 클래스를 사용하여 deque 객체를 만들 수 있습니다.
Deque deque_obj = new ArrayDeque ();
및 예
다음 Java 프로그램은 deque를 더 잘 이해하기위한 간단한 예제를 보여줍니다. 여기에서는 ArrayDeque 클래스를 사용하여 deque 인터페이스를 인스턴스화했습니다. deque 객체에 몇 가지 요소를 추가 한 다음 forEach 루프를 사용하여 인쇄했습니다.
import java.util.*; public class Main { public static void main(String() args) { //Creat a Deque and add elements Deque cities_deque = new ArrayDeque(); cities_deque.add('Delhi'); cities_deque.add('Mumbai'); cities_deque.add('Bangaluru'); System.out.println('Deque Contents:'); //Traverse the Deque for (String str : cities_deque) { System.out.print(str + ' '); } } }
산출:
자바 API 및 방법
deque 인터페이스는 대기열 인터페이스를 구현하므로 대기열 인터페이스의 모든 메소드를 지원합니다. 또한 deque 인터페이스는 deque 객체로 다양한 작업을 수행 할 수있는 다음과 같은 메소드를 제공합니다.
아래 표에 이러한 방법을 요약 해 보겠습니다.
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
getFirst | E getFirst () | deque를 제거하지 않고 첫 번째 요소를 검색합니다. |
더하다 | 부울 추가 (E e) | 용량 제한을 위반하지 않고 주어진 요소 e를 deque (꼬리)에 추가하고 성공하면 true를 반환합니다. deque에 사용 가능한 공간이 없으면 IllegalStateException이 발생합니다. |
addFirst | 무효 addFirst (E e) | 용량 제한을 위반하지 않고 주어진 요소 e를 대기열 맨 앞에 추가합니다. |
addLast | 무효 addLast (E e) | 용량 제한을 위반하지 않고 deque의 마지막에 요소 e를 추가합니다. |
포함 | 부울 contains (Object o) | deque에 주어진 요소 o가 포함되어 있는지 확인합니다. 그렇다면 true를 반환합니다. |
내림차순 | 내림차순 반복기 | 이 메서드는 deque에 대해 역순 반복기를 반환합니다. |
요소 | E 요소 () | 데크의 첫 번째 요소 또는 헤드를 반환합니다. 요소를 삭제하지는 않습니다. |
getLast | E getLast () | deque를 제거하지 않고 마지막 요소를 가져옵니다. |
반복자 | 반복자 iterator () | deque의 요소에 대한 표준 반복기를 반환합니다. |
제공 | 부울 제공 (E e) | 용량 제한을 위반하지 않고 주어진 요소 e를 deque (꼬리)에 추가합니다. 성공하면 true를, 실패하면 false를 반환합니다. |
offerFirst | 부울 offerFirst (E e) | 용량 제한을 위반하지 않고 주어진 요소 e를 데크 앞에 삽입하십시오. |
offerLast | 부울 offerLast (E e) | 용량 제한을 위반하지 않고 deque 끝에 주어진 요소 e를 삽입합니다. |
몰래 엿보다 | E 엿보기 () | deque의 헤드 (첫 번째 요소)를 반환하거나 대기열이 비어있는 경우 null을 반환합니다. ** 머리를 삭제하지 않습니다 |
peekFirst | E peekFirst () | deque의 첫 번째 요소를 삭제하지 않고 반환합니다. deque가 비어 있으면 null을 반환합니다. |
peekLast | E peekLast () | 데크의 마지막 요소를 제거하지 않고 검색합니다. deque가 비어 있으면 null을 반환합니다. |
투표 | E 투표 () | 데크의 헤드를 삭제하고 반환합니다. deque가 비어 있으면 null을 반환합니다. |
pollFirst | E pollFirst () | 데크의 첫 번째 요소를 반환하고 제거합니다. deque가 비어 있으면 null을 반환합니다. |
pollLast | E pollLast () | 데크의 마지막 요소를 반환하고 제거합니다. deque가 비어 있으면 null을 반환합니다. |
팝 | E pop () | deque를 사용하여 표현되는 스택에서 요소를 팝합니다. |
푸시 | 무효 푸시 (E e) | 용량 제한을 위반하지 않고 deque를 사용하여 표시된 스택에 주어진 요소 e를 푸시합니다. 성공하면 true를 반환하고 deque에 사용할 수있는 공간이 없으면 IllegalStateException을 반환합니다. |
없애다 | E remove () | 데크의 머리를 제거하고 되돌립니다. |
없애다 | 부울 제거 (Object o) | deque에서 주어진 요소 o의 첫 번째 발생을 제거합니다. |
removeFirst | E removeFirst () | 데크의 첫 번째 요소를 제거하고 반환합니다. |
removeFirstOccurrence | 부울 removeFirstOccurrence (Object o) | deque에서 주어진 요소 o의 첫 번째 발생을 제거합니다. |
removeLast | E removeLast () | 데크의 마지막 요소를 검색하고 삭제합니다. |
removeLastOccurrence | 부울 removeLastOccurrence (Object o) | deque에서 주어진 요소 o의 마지막 발생을 삭제합니다. |
크기 | int 크기 () | 데크에있는 요소의 크기 또는 수를 반환합니다. |
그리고 Java에서 구현
이제 위에서 설명한 몇 가지 주요 deque 메서드를 보여주기 위해 Java 프로그램을 구현해 보겠습니다.
이 프로그램에서는 String 타입 deque를 사용하고 add, addFirst, addLast, push, offer, offerFirst 등과 같은 다양한 메소드를 사용하여이 deque에 요소를 추가합니다. 그런 다음 deque를 표시합니다. 다음으로, deque에 대한 표준 및 역방향 반복자를 정의하고 deque를 통과하여 요소를 인쇄합니다.
또한 contains, pop, push, peek, poll, remove 등과 같은 다른 방법을 사용합니다.
import java.util.*; public class Main { public static void main(String() args) { //Declare Deque object Deque deque = new LinkedList(); // add elements to the queue using various methods deque.add('One'); //add () deque.addFirst('Two'); //addFirst () deque.addLast('Three'); //addLast () deque.push('Four'); //push () deque.offer('Five'); //offer () deque.offerFirst('Six'); //offerFirst () deque.offerLast('Seven'); //offerLast () System.out.println('Initial Deque:'); System.out.print(deque + ' '); // Iterate using standard iterator System.out.println('
Deque contents using Standard Iterator:'); Iterator iterator = deque.iterator(); while (iterator.hasNext()) System.out.print(' ' + iterator.next()); // Iterate using Reverse order iterator Iterator reverse = deque.descendingIterator(); System.out.println('
Deque contents using Reverse Iterator:'); while (reverse.hasNext()) System.out.print(' ' + reverse.next()); // Peek () method System.out.println('
Deque Peek:' + deque.peek()); System.out.println('
Deque,After peek:' + deque); // Pop () method System.out.println('
Deque Pop:' + deque.pop()); System.out.println('
Deque,After pop:' + deque); // contains () method System.out.println('
Deque Contains Three: ' + deque.contains('Three')); deque.removeFirst(); //removeFirst () deque.removeLast(); //removeLast () System.out.println('
Deque, after removing ' + 'first and last elements: ' + deque); } }
산출:
자주 묻는 질문
Q # 1) Deque는 스레드로부터 안전한 Java입니까?
대답: ArrayDeque는 스레드로부터 안전하지 않습니다. 그러나 java.util.concurrent 클래스의 BlockingDeque 인터페이스는 deque를 나타냅니다. 이 deque는 스레드로부터 안전합니다.
질문 # 2) Deque가 스택보다 빠른 이유는 무엇입니까?
대답: deque 인터페이스를 구현하는 ArrayDeque 인터페이스는 이전 또는 다음 노드를 추적 할 필요가 없기 때문에 메모리 효율적입니다. 또한 크기 조정이 가능한 구현입니다. 따라서 deque는 스택보다 빠릅니다.
질문 # 3) Deque는 스택입니까?
대답: deque는 양단 대기열입니다. LIFO 동작을 허용하므로 스택이 아니지만 스택으로 구현할 수 있습니다.
질문 # 4) Deque는 어디에 사용됩니까?
대답: deque는 주로 실행 취소 및 기록과 같은 기능을 구현하는 데 사용됩니다.
Q # 5) Deque는 원형입니까?
대답: 예, Deque는 원형입니다.
결론
이것으로 Java의 Deque 인터페이스에 대한 자습서가 완료되었습니다. deque 인터페이스는 양쪽 끝에서 요소를 삽입하고 삭제할 수있는 모음 인 deque 데이터 구조로 구현됩니다.
두 클래스, 즉 ArrayDeque와 LinkedList는 deque 인터페이스를 구현합니다. 이 클래스를 사용하여 deque 인터페이스의 기능을 구현할 수 있습니다.
=> 독점적 인 Java 교육 자습서 시리즈를 보려면 여기를 방문하십시오.