4.ArrayList vs HashMap 검색 시간 확인

Alex·2024년 7월 1일
0

성능 개선

목록 보기
3/9

Arraylist는 모든 리스트를 돌면서 내가 찾으려는 것인지 확인하고
Hashmap은 버킷을 만들고 그 버킷 내에 내가 찾으려는 값이 있는지 확인한다.


@RestController
public class ArrayListAndHashMapController {

    private static final int N = 10_000_000; // 요소 개수

    private final List<Integer> arrayList = new ArrayList<>();
    private final Map<Integer, String> hashMap = new HashMap<>();

    public ArrayListAndHashMapController() {
        // ArrayList 초기화
        for (int i = 0; i < N; i++) {
            arrayList.add(i);
        }

        // HashMap 초기화
        for (int i = 0; i < N; i++) {
            hashMap.put(i, "Value" + i);
        }
    }

    // 시간복잡도 : O(n)
    @GetMapping("/arraylist")
    public String arrayListPerformance(@RequestParam Integer target) {
        long startTime = System.currentTimeMillis();

        Integer result = arrayList.stream()
                .filter(value -> value.equals(target))
                .findFirst()
                .orElse(null);

        long endTime = System.currentTimeMillis();
        long elapsedTime = endTime - startTime;

        return "ArrayList Lookup Time: " + elapsedTime + " ms, Founded: " + result;
    }

    // 시간복잡도 : O(1)
    @GetMapping("/hashmap")
    public String hashMapPerformance(@RequestParam Integer target) {
        long startTime = System.currentTimeMillis();

        String value = hashMap.get(target);

        long endTime = System.currentTimeMillis();
        long elapsedTime = endTime - startTime;

        return "HashMap Lookup Time: " + elapsedTime + " ms, Founded: " + value;
    }

}

파라미터의 값을 낮게하면 지연시간이 크지 않다.

100만을 넣으니 지연시간이 크게 올라갔다.

이제 해시맵을 확인해보자

9백만을 했을 떄 1백만보다 더 빠르게 작업이 끝났다. 미미한 차이지만 지연시간이 늘어나지 않는다는 것이 중요 포인트다.

9백만을 했을 떄 1백만보다 더 빠르게 작업이 끝났다.

  • 내 PC에서 애플리케이션을 시작하고 성능 테스트를 해도 되나?

-->성능 테스트 역시 물리적인 자원을 쓰기 때문에 애플리케이션 성능을 제대로 측정하기 어렵다.

같은 컴퓨터위에서 쓰면 간섭이 생긴다.

--> 서버에 애플리케이션을 배포해둔 상태에서 하는 게 좋다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글