스택, 큐, 덱 - java.util.Stack

이현빈·2025년 2월 25일
0

1. java.util.Stack 개괄

연관된 상위 인터페이스/클래스

상위 클래스

java.util.Vector

  • 컬렉션 프레임워크가 등장하기 이전에 사용된, 객체배열에 관한 컬렉션 클래스
    : 저장 가능 용량 초과 시, 기존의 용량을 증가시킨 객체배열을 재생성한 후 기존 데이터를 복사하여 사용
  • 일부 메서드에서 synchronized 키워드 사용
    : 해당 메서드 호출 시 강제 동기화로 인해 단일 스레드에서의 성능 저하가 발생
  • java.util.ArrayList로 대체되어 현재는 거의 사용되지 않음
    : 기존 코드와의 호환성을 유지하기 위한 목적으로만 존재

ps) 위 도식에 포함되어 있지만 따로 다루지 않은 인터페이스/클래스는 여기에 정리함


2. java.util.Stack의 주요 메서드

생성자

  • 별도의 초기화 작업 없이 그대로 빈 스택을 생성
  • java.util.Vector의 필드인 Object 배열을 스택으로 사용하지만 그 크기를 사용자가 직접 설정하는 것은 불가능
    : 주어진 생성자는 매개변수를 사용하지 않고, 이 생성자가 java.util.Stack의 유일한 생성자이기 때문
  • 최초 생성된 스택의 용량은 초기값인 10으로 고정

스택에 데이터 추가: push()

java.util.Stack의 push() 메서드

public Object push(Object item)

  • 스택에 새로운 데이터를 추가
  • java.util.VectoraddElement() 메서드를 호출

java.util.Vector의 addElement(), add(), grow() 메서드

public synchronized void addElement(Object obj)

  • 새로운 데이터를 지정한 배열의 맨 뒤에 추가
  • 이 메서드는 동기화되어 실행됨
    : 이 메서드에서 호출한 add()가 실행 종료되기 전에는 다른 메서드가 배열의 데이터 변경 불가

private void add(Object e, Object[] elementData, int s)

  • 지정한 배열에 더 이상 데이터를 저장할 수 없으면 grow()를 호출하여 배열의 크기 증가
  • 지정한 데이터를 배열에 저장

private void grow()

  • 배열에 더 이상 데이터를 저장할 수 없으면 배열의 크기는 기존의 2배로 증가
    cf) 동일한 상황일 때 java.util.ArrayList에서의 배열 크기는 기존의 1.5배로 증가

스택에서 데이터 삭제: pop()

java.util.Stack의 pop() 메서드

public synchronized Object pop()

  • 스택의 꼭대기에 저장된 데이터를 배열에서 삭제
  • java.util.VectorremoveElementAt() 메서드의 실행이 완료된 이후에 배열을 사용하는 다른 메서드를 호출 가능

java.util.Vector의 removeElementAt() 메서드

public synchronized void removeElementAt(int index)

  • 배열의 지정된 인덱스에 저장된 데이터를 삭제
  • 배열에서의 삭제와 동일한 방식: 데이터 삭제 시 시간복잡도는 O(n)O(n)
  • 지정한 인덱스가 배열의 인덱스 범위를 초과할 시 Exception 발생

데이터 조회: peek()

java.util.Stack의 peek() 메서드

public synchronized Object peek()

  • 스택에 가장 최근에 저장된 데이터를 반환
  • java.util.VectorelementAt() 메서드의 실행이 종료된 이후부터 다른 메서드가 배열 이용 가능

java.util.Vector의 elementAt(), elementData() 메서드

public synchronized Object elementAt(int index)

  • 지정한 인덱스가 배열의 범위에 속하면 elementData()를 호출

E elementData(int index)

  • 배열의 지정한 인덱스에 저장된 데이터를 반환

java.util.Stack의 search() 메서드

public synchronized int search(Object o)

  • 지정한 객체를 Stack에서 찾아서 그 위치를 반환(찾지 못할 시 -1을 반환)
  • 배열 인덱스와는 달리, 위치는 0이 아닌 1부터 시작
    : Stack의 크기에서 현재 인덱스를 뺀 값을 반환하기 때문

java.util.Vector의 lastIndexOf() 메서드

public synchronized int lastIndexOf(Object o)

  • 객체 배열의 마지막부터 역순으로 탐색하여 지정한 객체의 위치를 반환

public synchronized int lastIndexOf(Object o, int index)

  • 객체 배열의 지정한 위치부터 역순으로 탐색하여 지정한 객체의 위치를 반환

Reference

0개의 댓글