산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java ArrayDeque 마스터: 완벽 가이드 & 스택 구현

Java ArrayDeque

ArrayDeque 클래스, 메서드, 실전 예제(스택으로 사용하는 법 포함)를 설명합니다.

Java에서 ArrayDeque는 크기 조절 가능 배열로 뒷받침되는 큐와 덱 자료구조를 구현합니다.


ArrayDeque가 구현하는 인터페이스

ArrayDeque 클래스는 다음 인터페이스를 구현합니다:


ArrayDeque 생성하기

패키지 임포트:

import java.util.ArrayDeque;

타입 지정된 덱 인스턴스화:

ArrayDeque<Type> deque = new ArrayDeque<>();

예제:

// String 덱
ArrayDeque<String> animals = new ArrayDeque<>();
// Integer 덱
ArrayDeque<Integer> ages = new ArrayDeque<>();

핵심 ArrayDeque 메서드

요소 삽입하기

1. add(), addFirst(), addLast() 사용

주의: 덱이 가득 차면 IllegalStateException 발생

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.addFirst("Cat");
animals.addLast("Horse");
System.out.println("ArrayDeque: " + animals);

출력

ArrayDeque: [Cat, Dog, Horse]

2. offer(), offerFirst(), offerLast() 사용

주의: 덱이 가득 차면 false 반환

ArrayDeque<String> animals = new ArrayDeque<>();
animals.offer("Dog");
animals.offerFirst("Cat");
animals.offerLast("Horse");
System.out.println("ArrayDeque: " + animals);

출력

ArrayDeque: [Cat, Dog, Horse]

요소 접근하기

1. getFirst()와 getLast()

주의: 덱이 비어있으면 NoSuchElementException 발생

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("First Element: " + animals.getFirst());
System.out.println("Last Element: " + animals.getLast());

출력

ArrayDeque: [Dog, Cat, Horse] First Element: Dog Last Element: Horse

2. peek(), peekFirst(), peekLast()

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Head Element: " + animals.peek());
System.out.println("First Element: " + animals.peekFirst());
System.out.println("Last Element: " + animals.peekLast());

출력

ArrayDeque: [Dog, Cat, Horse] Head Element: Dog First Element: Dog Last Element: Horse

주의: 덱이 비어있으면 peek() 계열은 예외 대신 null 반환

요소 제거하기

1. remove(), removeFirst(), removeLast()

주의: 덱이 비어있거나 remove(o)가 o를 못 찾으면 NoSuchElementException 발생

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Removed Element: " + animals.remove());
System.out.println("New ArrayDeque: " + animals);
System.out.println("Removed First Element: " + animals.removeFirst());
System.out.println("Removed Last Element: " + animals.removeLast());

출력

ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse

2. poll(), pollFirst(), pollLast()

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
System.out.println("Removed Element: " + animals.poll());
System.out.println("New ArrayDeque: " + animals);
System.out.println("Removed First Element: " + animals.pollFirst());
System.out.println("Removed Last Element: " + animals.pollLast());

출력

ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse

3. clear()

덱 전체 비우기

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("ArrayDeque: " + animals);
animals.clear();
System.out.println("New ArrayDeque: " + animals);

출력

ArrayDeque: [Dog, Cat, Horse] New ArrayDeque: []

ArrayDeque 순회하기

ArrayDeque<String> animals = new ArrayDeque<>();
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.print("ArrayDeque: ");
Iterator<String> it = animals.iterator();
while(it.hasNext()) {
    System.out.print(it.next() + ", ");
}
System.out.print("\nArrayDeque in reverse order: ");
Iterator<String> rev = animals.descendingIterator();
while(rev.hasNext()) {
    System.out.print(rev.next() + ", ");
}

출력

ArrayDeque: [Dog, Cat, Horse] ArrayDeque in reverse order: [Horse, Cat, Dog]

기타 주요 메서드

메서드설명
element()머리 요소 조회(제거 안 함)
contains(Object o)o 존재 여부 확인, 발견 시 true
size()덱의 요소 수
toArray()덱을 배열로 변환
clone()덱의 얕은 복사본 생성

ArrayDeque를 스택으로 사용하기

LIFO 동작에는 Stack보다 ArrayDeque가 선호됩니다. 더 나은 성능과 레거시 동기화 오버헤드가 없기 때문입니다.

스택 스타일 메서드:

ArrayDeque<String> stack = new ArrayDeque<>();
stack.push("Dog");
stack.push("Cat");
stack.push("Horse");
System.out.println("Stack: " + stack);
System.out.println("Accessed Element: " + stack.peek());
System.out.println("Removed Element: " + stack.pop());

출력

Stack: [Horse, Cat, Dog] Accessed Element: Horse Removed Element: Horse

ArrayDeque vs LinkedList

둘 다 Deque를 구현하지만 차이가 있습니다:

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 주석: 종류, 사용법, 모범 사례
  3. Java 향상된 for 루프(for-each) 완벽 가이드: 문법, 예제, 비교
  4. Java String 마스터하기: 생성, 메서드, 모범 사례
  5. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  6. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  7. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  8. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  9. Java Assertion(어설션) 실전 가이드: 버그 조기 발견과 코드 신뢰성 확보
  10. Java Vector 완벽 가이드: 사용법, 특징, ArrayList와의 비교