Arrays 클래스의 length는 capacity일까 size일까?

한시온·2022년 1월 31일
0
post-thumbnail

계기

자바로 배열큐(Array Queue)를 구현하는 과정에서 Arrays 클래스에서 접근할 수 있는 length 필드가 배열의 전체 크기에 해당하는지 배열이 포함하는 요소의 개수를 의미하는지 궁금했다.

가정

public class ArrayQueue {

    private int[] queue;
    private int capacity;
    private int size;
	...

배열큐 클래스는 capacitysize를 필드로 가진다. 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 필드는 배열의 크기를 의미한다. 끝.

profile
가볍고 무겁게

0개의 댓글