[객체지향프로그래밍][Java] Queue 심화 내용

2023. 6. 1. 22:04·전공/객체지향프로그래밍
728x90
반응형

Interface Queue<E>

Queue는 인터페이스 Collection<E> 상속

메소드 기능
boolean add(E e) e를 큐에 삽입, 성공시 true 반환
용량을 초과한 경우 IllegalStateException 발생
E element() 큐의 head 반환
큐가 비어있으면 예외 발생
boolean offer(E e) e를 큐에 삽입, 성공시 true 반환
용량을 초과한 경우 false 반환
E peek() 큐의 head 검색
큐가 비어있으면 null반환
E poll() 큐의 head 검색 및 삭제
큐가 비어있으면 null 반환
E remove() 큐의 head 삭제
큐가 비어있으면 예외 발생

 

Queue는 선입선출 방식으로 원소를 저장

 

head에서는 remove, poll로 인해 삭제가 일어남

rear(head의 반대쪽)에서는 add, offer로 인해 삽입이 일어남

 

대부분의 경우 Queue에서 삽입이 성공적으로 이루어지지만

BlockingQueue 등 용량이 정해져있는 큐에서는 삽입 실패가 일어나기도 함

 

Queue에서는 일반적으로 null 삽입 불가

하지만 Queue를 상속받는 인터페이스 LinkedList에서는 null 삽입 가능

 

import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.LinkedList;

public class Main {
    public static void main(String[] args) {
        Queue<String> q = new LinkedList<>();

        System.out.println(q.offer("Apple"));
        System.out.println(q.offer(null));
        // LinkedList에서는 null 삽입 가능
        System.out.println(q.offer("Mango"));
        while (!q.isEmpty()) {
            System.out.println("examine: " + q.peek());
            System.out.println("remove: " + q.poll());
        }

        q = new LinkedBlockingQueue<>(2);

        System.out.println(q.offer("Apple"));
        System.out.println(q.offer("Orange"));
        // 일반적으로 null 삽입 불가
        System.out.println(q.offer("Mango"));
        for (int i = 0; i < 3; i++) {
            System.out.println("examine: " + q.peek());
            System.out.println("remove: " + q.poll());
        }
    }
}
true
true
true
examine: Apple
remove: Apple
examine: null
remove: null
examine: Mango
remove: Mango
true
true
false
examine: Apple
remove: Apple
examine: Orange
remove: Orange
examine: null
remove: null
728x90
반응형

'전공 > 객체지향프로그래밍' 카테고리의 다른 글

[객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)  (0) 2023.06.07
[객체지향프로그래밍][Java] Generics 심화 내용  (0) 2023.06.03
[객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)  (0) 2023.06.01
[객체지향프로그래밍][Java] List 심화 내용(Iterator)  (0) 2023.06.01
[객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar)  (0) 2023.05.31
'전공/객체지향프로그래밍' 카테고리의 다른 글
  • [객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)
  • [객체지향프로그래밍][Java] Generics 심화 내용
  • [객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)
  • [객체지향프로그래밍][Java] List 심화 내용(Iterator)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터 구조 및 설계
    백준
    자료구조
    추가 문제
    컴공 포트폴리오
    티스토리챌린지
    컴퓨터구조
    사설 문제
    오블완
    데이터패스
    자바
    단일 사이클
    명령어
    반복자
    메모리 계층 구조
    상속
    C++
    리눅스
    코틀린
    42서울
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[객체지향프로그래밍][Java] Queue 심화 내용
상단으로

티스토리툴바