큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out) 구조로 되어있다.
즉, 큐는 양 옆만 막혀있고 위아래로 뚫려 있어서 한 방향으로는 넣고 한 방향으로는 빼는 파이프와 같은 구조로 되어있다.
큐는 데이터를 꺼낼 때 항상 첫 번째에 저장된 데이터를 삭제하므로, ArrayList와 같은 배열 기반의 컬렉션 클래스를 사용한다면 데이터를 꺼낼 때마다 빈 공간을 채우기 위해 데이터의 복사가 발생하므로 비효율적이다.
그래서 큐는 ArrayList보다 데이터의 추가/삭제가 쉬운 LinkedList로 구현하는 것이 더 적합하다.
Queue<String> printerQueue = new LinkedList<String>();
boolean add( Object o )
: 지정된 객체를 Queue에 추가한다.
성공하면 true를 반환. 저장공간이 부족하면 IllegalStateException 발생
Object remove( )
: Queue에서 객체를 꺼내 반환.
비어있으면 NoSuchElementException 발생
Object element( )
: 삭제없이 요소를 읽어온다.
peek과 달리 Queue가 비었을 때 NoSuchElementException 발생
boolean offer( Object o )
: Queue에서 객체를 저장.
성공하면 true, 실패하면 false를 반환.
Object poll( )
: Queue에서 객체를 꺼내서 반환.
비어있으면 null을 반환.
Object peek( )
: 삭제없이 요소를 읽어 온다.
Queue가 비어있으면 null을 반환.
순서대로 처리되는 대기줄과 같은 경우
데이터 유입 속도가 데이터 소모 속도보다 빠른 경우
데이터 제공자의 수가 데이터 소비자의 수와 다른 경우