Java Collection 해시 도입 - 메모리 낭비

이전 시간에 해시 도입 전 성능 개선으로 다음 코드를 작성하였다.

Main.class

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Integer[] input = new Integer[12];
        input[1] = 1;
        input[3] = 3;
        input[5] = 5;
        input[7] = 7;
        input[9] = 9;
        input[11] = 11;
        System.out.println("Array: " + Arrays.toString(input));

        int whereNumber = 11;

        System.out.println("find Number: " + input[whereNumber]);
    }
}

Array: [null, 1, null, 3, null, 5, null, 7, null, 9, null, 11]
find Number: 11

for문을 쓰지 않고 검색 기능 성능을 O(1) 수준으로 끌어올렸으나 사용하지 않는 공간이 많으며 메모리를 낭비시키고 있다.

int 숫자의 모든 범위를 입력하면 배열의 크기 한계에 대해 알아봐야 한다.

  • 0~11 숫자의 메모리 범위
    • 사이즈는 12개가 필요하므로 4byte * 12 = 48byte 필요
  • int 범위 입력
    • int 범위: -2,147,483,648 - 2,147,483,647
    • 약 +- 포함하여 42억 사이즈의 배열이 필요하다.
    • 4byte * 42억은 약 16~18기가바이트 필요하므로 그 안에 불필요한 공간을 낭비하면 메모리 공간을 낭비된다.

하나의 int형만으로 메모리를 소모시키는 결과를 초래할 수 있다. 데이터 중간중간 빈 공간으로 데이터 값을 인덱스로 활용한다는 것은 사용하기 어렵다.