자바 집합의 Stack 과 Queue 소개
9080 단어 자바 노트
Stack 은 Vector 의 하위 클래스 로 '스 택' 이라는 데이터 구 조 를 모 의 하 는 데 사 용 됩 니 다. '스 택' 은 보통 '후진 선 출' (LIFO) 용 기 를 말 합 니 다.마지막 으로 "push" 가 스 택 에 들 어 가 는 요 소 는 가장 먼저 "pop" 에 의 해 스 택 에서 나 옵 니 다.스 택 에 들 어 가 는 것 은 모두 Object 이기 때문에 스 택 에서 요 소 를 꺼 낸 후 유형 전환 을 해 야 합 니 다.
Stack 제공 방법:
Stack 은 Vector 를 통합 시 켰 기 때문에 아주 오래된 자바 집합 류 이기 도 합 니 다. 똑 같이 스 레 드 가 안전 하고 성능 이 떨 어 지기 때문에 Stack 류 를 최대한 적 게 사용 합 니 다.필요 하 시 면 Array Deque 를 사용 하 세 요.
Array Deque 는 List 의 실현 클래스 로 Array Deque 는 List 인터페이스 도 실현 하고 Deque 인터페이스 도 실현 하 며 실현 되 는 Deque 인터페이스 이기 때문에 스 택 으로 사용 할 수 있 습 니 다.또한 Array Deque 밑바닥 도 배열 에 기반 한 것 이기 때문에 성능 도 좋다.
Queue
Queue 는 이러한 데이터 구 조 를 모 의 하 는 데 사 용 됩 니 다. 대기 열 은 보통 '먼저 나 가기' (FIFO) 용 기 를 말 합 니 다.
대기 열의 머리 는 대기 열 에 가장 긴 요 소 를 저장 하고 대기 열의 끝 은 대기 열 에 가장 짧 은 요 소 를 저장 합 니 다.새 요 소 는 대기 열의 끝 에 삽입 되 며, 접근 요소 (poll) 작업 은 대기 열의 머리 요 소 를 되 돌려 줍 니 다.
대기 열 에서 대기 열 에 있 는 요 소 를 무 작위 로 접근 할 수 없습니다.
Queue 디 결합 에서 다음 과 같은 방법 을 정의 합 니 다.
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 인터페이스 에 서 는 쌍 단 대기 열 방법 을 정 의 했 습 니 다. 이 방법 들 은 양쪽 에서 대기 열 요 소 를 조작 할 수 있 습 니 다.
메모: 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++]
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA Blue Bridge 컵(4) Excel 주소 변환문제 설명 Excel은 가장 자주 사용하는 사무용 소프트웨어입니다.모든 칸에는 유일한 주소 표시가 있다.예를 들어 12행 4열은 "D12", 5행 255열은 "IU5"를 나타냅니다.사실 Excel은 두 가지 주소 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.