자바로 배열큐(Array Queue)를 구현하는 과정에서 Arrays
클래스에서 접근할 수 있는 length
필드가 배열의 전체 크기에 해당하는지 배열이 포함하는 요소의 개수를 의미하는지 궁금했다.
public class ArrayQueue {
private int[] queue;
private int capacity;
private int size;
...
배열큐 클래스는 capacity
와 size
를 필드로 가진다. capacity
는 배열의 전체 크기를 의미하고 size
는 배열이 포함하고 있는 요소의 개수이다.
int value = 7;
queue.enqueue(value);
예를 들어 큐에 7이라는 값을 넣었을 때(enqueue) 배열의 capacity
는 3, size
는 1이다. size
의 크기는 큐에 포함된 요소의 개수에 따라 값이 증감하고 capacity
의 크기는 재할당하기 전까지 고정적이다.
@Test
void 재할당() {
int value = 7;
queue.enqueue(value);
int[] newQueue = queue.reallocate(queue.capacity() * 2);
assertThat(newQueue.length).isEqualTo(queue.capacity());
System.out.println("length of queue: " + newQueue.length
+ "\nsize of queue: " + queue.size()
+ "\ncapacity of queue: " + queue.capacity());
}
기존 배열큐 capacity
의 2배 크기(6)를 가진 배열을 생성했을 때
새 배열의 length
가
1. 재할당된 capacity
에 해당한다면 length == 6
이다.
2. 배열 요소의 개수인 size
에 해당한다면 length == 1
이다.
length of queue: 6
size of queue: 1
capacity of queue: 6
재할당된 capacity
와 새 배열의 length
의 값이 일치한다.
Arrays
클래스의 length
필드는 배열의 크기를 의미한다. 끝.