자바 집합의 Stack 과 Queue 소개

9080 단어 자바 노트
Stack
Stack 은 Vector 의 하위 클래스 로 '스 택' 이라는 데이터 구 조 를 모 의 하 는 데 사 용 됩 니 다. '스 택' 은 보통 '후진 선 출' (LIFO) 용 기 를 말 합 니 다.마지막 으로 "push" 가 스 택 에 들 어 가 는 요 소 는 가장 먼저 "pop" 에 의 해 스 택 에서 나 옵 니 다.스 택 에 들 어 가 는 것 은 모두 Object 이기 때문에 스 택 에서 요 소 를 꺼 낸 후 유형 전환 을 해 야 합 니 다.
Stack 제공 방법:
  • Object peek () 는 스 택 의 첫 번 째 요 소 를 되 돌려 주지 만 칼슘 요소 'pop' 을 스 택 에서 꺼 내지 않 습 니 다.
  • Object pop () 은 스 택 의 첫 번 째 요 소 를 되 돌려 주 고 이 요소 인 'pop' 을 스 택 에서 꺼 냅 니 다.
  • void push (Object item) 는 하나의 요소 인 'push' 를 창고 에 넣 고 마지막 으로 창고 에 들 어 가 는 요 소 는 항상 창고 꼭대기 에 있 습 니 다.

  • Stack 은 Vector 를 통합 시 켰 기 때문에 아주 오래된 자바 집합 류 이기 도 합 니 다. 똑 같이 스 레 드 가 안전 하고 성능 이 떨 어 지기 때문에 Stack 류 를 최대한 적 게 사용 합 니 다.필요 하 시 면 Array Deque 를 사용 하 세 요.
    Array Deque 는 List 의 실현 클래스 로 Array Deque 는 List 인터페이스 도 실현 하고 Deque 인터페이스 도 실현 하 며 실현 되 는 Deque 인터페이스 이기 때문에 스 택 으로 사용 할 수 있 습 니 다.또한 Array Deque 밑바닥 도 배열 에 기반 한 것 이기 때문에 성능 도 좋다.
    Queue
    Queue 는 이러한 데이터 구 조 를 모 의 하 는 데 사 용 됩 니 다. 대기 열 은 보통 '먼저 나 가기' (FIFO) 용 기 를 말 합 니 다.
    대기 열의 머리 는 대기 열 에 가장 긴 요 소 를 저장 하고 대기 열의 끝 은 대기 열 에 가장 짧 은 요 소 를 저장 합 니 다.새 요 소 는 대기 열의 끝 에 삽입 되 며, 접근 요소 (poll) 작업 은 대기 열의 머리 요 소 를 되 돌려 줍 니 다.
    대기 열 에서 대기 열 에 있 는 요 소 를 무 작위 로 접근 할 수 없습니다.
    Queue 디 결합 에서 다음 과 같은 방법 을 정의 합 니 다.
  • void add (Object o) 는 지정 한 요 소 를 이 대기 열의 끝 에 추가 합 니 다.
  • Object element () 는 대기 열 머리 요 소 를 가 져 오지 만 이 요 소 를 삭제 하지 않 습 니 다.
  • boolean offer (Object o) 는 지정 한 요 소 를 이 대기 열의 끝 에 추가 합 니 다.용량 제한 이 있 는 대기 열 을 사용 할 때 이 방법 은 보통 add (Object e) 방법 보다 좋 습 니 다.
  • Object peek () 는 대기 열 머리 요 소 를 가 져 오지 만 이 요 소 를 삭제 하지 않 습 니 다.대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object poll () 은 대기 열 머리 요 소 를 가 져 오고 이 요 소 를 삭제 합 니 다.대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object remove () 는 대기 열의 머리 요 소 를 가 져 오고 이 요 소 를 삭제 합 니 다.
  • 리스트 내용
  • Queue 디 결합 은 Priority Queue 구현 클래스 가 하나 밖 에 없습니다.그 밖 에 Queue 에는 Deque 인터페이스 가 하나 더 있 습 니 다. Deque 는 '양 끝 대기 열' 을 대표 합 니 다. 양 끝 대기 열 은 동료 가 양 끝 에 요 소 를 추가 하고 삭제 할 수 있 기 때문에 Deque 의 실현 클래스 는 대기 열 로 도 사용 할 수 있 고 스 택 으로 도 사용 할 수 있 습 니 다.
    PriorityQueue
    Priority Queue 는 비교적 표준적 인 대기 열 실현 클래스 입 니 다.절대 표준 대기 열 구현 클래스 가 아 닌 표준 대기 열 구현 클래스 라 고 하 는 이 유 는 Priority Queue 가 대기 열 요 소 를 저장 하 는 순서 가 대기 열 에 가입 하 는 순서 가 아니 라 대기 열 요소 크기 에 따라 정렬 하기 때 문 입 니 다.따라서 peek () 방법 이나 poll () 방법 으로 대기 열 에 있 는 요 소 를 추출 할 때 가장 먼저 대기 열 에 들 어간 요 소 를 추출 하 는 것 이 아니 라 대기 열 에 있 는 가장 작은 요 소 를 추출 하 는 것 입 니 다.
    메모: Priority Queue 는 대열 의 가장 기본 적 인 규칙 을 위반 하 였 습 니 다. 먼저 나 가기 (FIFO).
    예시:
    package com.queue;
    import java.util.PriorityQueue;
    
    public class QueueOrDueueTest {
    
        public static void main(String[] args) {
            PriorityQueue queue = new PriorityQueue();
            queue.offer(2);
            queue.offer(12);
            queue.offer(-2);
            queue.offer(5);
            System.out.println(queue);//[-2, 5, 2, 12]
            System.out.println(queue.poll());//                -2
            System.out.println(queue.poll());//2
            System.out.println(queue.poll());//5
            System.out.println(queue);//[12]
    
        }
    
    }

    프로그램 이 queue. poll () 방법 을 여러 번 호출 하면 요소 가 작은 순서 로 '대기 열 이동' 하 는 것 을 볼 수 있 습 니 다.
    자연 정렬: 자연수 에 필요 한 Priority Queue 집합 에 있 는 요 소 를 사용 하려 면 Comparable 인 터 페 이 스 를 실현 해 야 하고 같은 종류의 여러 인 스 턴 스 가 있어 야 합 니 다. 그렇지 않 으 면 ClassCase Exception 을 던 져 야 합 니 다.
    맞 춤 형 정렬: Priority Queue 대기 열 을 만 들 때 Comparator 대상 을 입력 합 니 다. 이 대상 은 대기 열 에 있 는 모든 요 소 를 정렬 합 니 다.맞 춤 형 정렬 을 사용 할 때 대기 열 요소 가 필요 없 이 Comparable 인 터 페 이 스 를 실현 합 니 다.
    Deque 인터페이스 와 Array Deque
    Deque 인 터 페 이 스 는 Queue 인터페이스의 하위 인터페이스 로 쌍 단 대기 열 을 대표 합 니 다. Deque 인터페이스 에 서 는 쌍 단 대기 열 방법 을 정 의 했 습 니 다. 이 방법 들 은 양쪽 에서 대기 열 요 소 를 조작 할 수 있 습 니 다.
  • void addFirst (Object o) 는 지정 한 요 소 를 양 끝 대기 열의 시작 에 삽입 합 니 다.
  • void addLast (Object o) 는 지정 한 요 소 를 쌍 단 대기 열의 끝 에 삽입 합 니 다.
  • Iterator descending Iterator () 는 양 단 대기 열 에 대응 하 는 교체 기 를 되 돌려 줍 니 다. 이 교체 기 는 역방향 순서 로 대기 열 에 있 는 요 소 를 교체 합 니 다.
  • Object getFirst () 는 쌍 단 대기 열의 첫 번 째 요 소 를 가 져 오지 만 삭제 하지 않 습 니 다.
  • Object getLast () 는 양 끝 대기 열의 마지막 요 소 를 가 져 오지 만 삭제 하지 않 습 니 다.
  • boolean offerFirst (Object o) 는 지정 한 요 소 를 쌍 단 대기 열의 시작 에 삽입 합 니 다.
  • boolean offerLast (Object o) 는 지정 한 요 소 를 쌍 단 대기 열의 끝 에 삽입 합 니 다.
  • Object peekFirst () 는 이 쌍 단 대기 열의 첫 번 째 요 소 를 가 져 왔 으 나 삭제 하지 않 았 습 니 다. 쌍 단 대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object peekLast () 는 이 쌍 단 대기 열의 마지막 요 소 를 가 져 왔 으 나 삭제 하지 않 았 습 니 다. 쌍 단 대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object pollFirst () 는 이 쌍 단 대기 열의 첫 번 째 요 소 를 가 져 오고 삭제 합 니 다. 쌍 단 대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object pollLast () 는 이 쌍 단 대기 열의 마지막 요 소 를 가 져 오고 삭제 합 니 다. 쌍 단 대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
  • Object pop () pop 은 이 양 끝 대기 열 에 표 시 된 스 택 의 스 택 상단 요 소 를 나 타 냅 니 다.removeFirst () 에 해당 합 니 다.
  • void push (Object o) 는 이 양 끝 대기 열 에 표 시 된 스 택 의 스 택 꼭대기 에 요 소 를 push 합 니 다.addFirst (e) 에 해당 합 니 다.
  • Object removeFirst () 는 이 쌍 단 대기 열의 첫 번 째 요 소 를 가 져 오고 삭제 합 니 다.
  • Object remove FirstOccurrence (Object o) 는 이 양 끝 대기 열 에 처음 나타 난 요소 o 를 삭제 합 니 다.
  • Object removeLast () 는 이 쌍 단 대기 열의 마지막 요 소 를 가 져 오고 삭제 합 니 다.
  • boolean removeLastOccurrence (Object o) 는 이 양 끝 대기 열의 마지막 요소 o 를 삭제 합 니 다.

  • 메모: Array Deque 는 배열 을 기반 으로 하 는 쌍 단 대기 열 입 니 다. Deque 를 만 드 는 것 은 numElements 인 자 를 지정 할 수 있 습 니 다. 이 인 자 는 Object [] 배열 의 길 이 를 지정 하 는 데 사 용 됩 니 다.numElements 인 자 를 지정 하지 않 으 면 Deque 바 텀 배열 의 길 이 는 16 입 니 다.
    Array Deque 스 택
    프로그램 에서 '스 택' 이라는 데이터 구 조 를 사용 해 야 할 때 ArrayDeque 를 사용 하 는 것 을 추천 하 며 Stack (너무 오래 되 고 성능 이 떨 어 짐) 을 사용 하지 않도록 한다.
    예시:
    package com.queue;
    
    import java.util.ArrayDeque;
    
    public class ArrayDequeTest {
    
        public static void main(String[] args) {
             ArrayDeque stack = new  ArrayDeque();
             stack.push("JAVA");
             stack.push("JS");
             stack.push("C++");
    
             System.out.println(stack);
             //  :[C++, JS, JAVA]
             //       ,       
             System.out.println(stack.peek());
             //  :C++
             System.out.println(stack.pop());
             //  :C++
             System.out.println(stack);
             //  :[JS, JAVA]
        }
    }

    Array Deque 를 대기 열 로 합 니 다.
    '선진 선 출' 의 방식 에 따라 집합 요 소 를 조작 하 다.
    예시:
    public static void main(String[] args) {
        ArrayDeque queue = new  ArrayDeque();
             queue.offer("JAVA");
             queue.offer("JS");
             queue.offer("C++");
    
             System.out.println(queue);
              //  :[JAVA, JS, C++]
    
                 //        ,    poll   " ",  :JAVA
             System.out.println(queue.peek());
    
             //poll      ,  :JAVA
             System.out.println(queue.poll());
             System.out.println(queue);
             //  :[JS, C++]

    좋은 웹페이지 즐겨찾기