먼저 들어온 값이 나중에 나가는 FIFO(First In First Out)이라고 부르는 자료 구조이다. 대기열처럼 먼저 기다리는 사람이 먼저 입장하는 구조이며, Queue는 어떠한 작업을 순서대로 처리해야하는 경우 사용된다.
Queue는 ArrayList와 마찬가지로 크기가 자동으로 늘어나며, 타입이 서로 다른 값을 추가할 수 있다.
Queue에 값을 추가하는 경우에는 Enqueue()
메서드를 사용하며, Queue에서 값을 제거하는 경우 Dequeue()
메서드를 사용한다.
Queue를 사용하기위해 System.Collections를 using문에 추가한다.
using System.Collections;
Queue 객체는 일반 객체를 생성하는 방법과 동일하며, var 타입도 가능하다.
Queue queue1 = new Queue();
var queue2 = new Queue();
Queue의 용량을 객체 생성할 때 설정할 수 있다. 만약 Queue에 데이터가 3개 존재하는데 여기에다가 추가로 데이터를 넣는 경우 Queue의 용량이 자동으로 증가한다.
Queue queue = new Queue(3);
① Queue 생성자에 배열을 넘기면, 배열의 값으로 Queue값이 초기화된다.
int[] arr = { 1, 2, 3, 4, 5 };
Queue queue = new Queue(arr);
② Queue 생성자에 object 타입의 배열을 전달하여 값을 초기화한다.
즉, 서로 다른 타입의 값을 Queue에 넣어야 하는 경우 object 타입의 배열을 전달하여 값 초기화 가능
다음과같이 ArrayList를 전달하여 값을 초기화할 수 있다.
ArrayList arrylist = new ArrayList { 1, "Hi", 5.5, true, 'A', null, " . " };
Queue queue = new Queue(arrylist);
참고로 Queue는 ArrayList와 다르게 컬렉션 이니셜라이즈 기법을 사용할 수 없다.
그래서 위의 예시에서 ArrayList를 전달에서 값을 초기화하는 것!// ArrayList는 가능 ArrayList arraylist = new ArrayList { 1, "Hi", 5.5, true, 'A', null, " . " }; // queue는 불가능 Queue queue = new Queue { 1, "Hi", 5.5, true, 'A', null, " . " };
Enqueue()
메서드를 사용하여 Queue에 값 추가
대기열의 마지막에 값이 추가되며 Queue 중간에 값을 삽입하는 것은 불가능하다.
Queue queue = new Queue();
queue.Enqueue( 1 ); // 이런식으로 사용
Dequeue()
메서드를 사용하여 Queue의 시작 부분의 값을 제거
Enqueue()
와 마찬가지로 중간에 있는 값을 삭제하는 것은 불가능하다.
사용하는 갯수만큼 삭제된다.
queue.Dequeue();
Queue의 모든 값을 제거할 때 사용하는 방법도 있다.
queue.Clear();
Queue의 앞쪽 항목을 삭제하지 않고 확인하고싶을 때는 Peek
메서드를 사용한다.
int frontItem = queue.Peek();
Console.WriteLine($"큐의 앞쪽 항목: {frontItem}");