본문 바로가기
java/메모장

리스트

by choi-dev 2024. 2. 12.

배열의 경우 불변성으로 인해 동적으로 변하는 자료형에는 어울리지 않는다. 이런 단점을 보완하고자 리스트 클래스가 만들어졌고 이 경우에는 가변성으로 메모리가 허용하는 선까지 값을 계속 추가할 수 있다.

 

예제로 알아보기

https://school.programmers.co.kr/learn/courses/30/lessons/181920

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

해당 문제를 배열과 리스트 두 가지 방법을 사용해 해결해보겠다.

 

배열

import java.util.*;

class Solution {
    public static int[] solution(int start_num, int end_num) {
        int[] answer = new int[end_num - start_num + 1];

        for (int i = 0; i < end_num - start_num + 1; i++) {
            answer[i] = start_num + i;
        }
        return answer;
    }
}

배열로 리턴해줄 경우에는 값을 인덱스에 맞게 넣어주어야 한다. 문제에서 의도한 것은 start_num부터 end_num까지의 숫자를 배열에 담으라는 것이기 때문에 end_num - start_num + 1개만큼의 배열 크기를 지정해주어야 한다.

 

리스트

import java.util.*;

class Solution {
    public List<Integer> solution(int start_num, int end_num) {
        List<Integer> answer = new ArrayList<Integer>();
        
        for (int i = start_num; i <= end_num; i++) {
            answer.add(i);
        }
        return answer;
    }
}

리스트를 사용했을 때는 크기를 따로 지정해주지 않고 start_num부터 end_num까지 반복문을 통해 answer 리스트에 값을 넣고 리턴해주었다.

 

무엇이 다를까?

배열을 사용했을 때는 크기를 정해주고 메모리 단에 올리기 때문에 작은 크기에서는 배열의 속도가 더 빠를 수 있다. 하지만 불변성이라는 이유로 값을 새로 추가해주는 것이 가능하지 않기 때문에 동적인 상황에서는 배열은 까다로울 수밖에 없다. 

 

그에 반면 리스트는 작은 크기의 데이터라면 배열보다는 느릴 수 있다. 하지만 값을 새로 추가해주는 동적인 상황에서는 자유롭기 때문에 실제로는 배열보다 리스트를 많이 사용하는 편이긴하다. 코딩 테스트의 면목에서는 배열이 조금 더 빠를 것이고 현업에서는 리스트가 더 처리하기 쉬울 것이다.

'java > 메모장' 카테고리의 다른 글

[코딩테스트] 달리기 경주  (0) 2024.02.18
형 변환  (0) 2024.02.12
람다식의 스트림 함수  (0) 2024.02.12
람다식 사용하기  (0) 2024.02.11
특정 인덱스에서 배열 슬라이싱하기  (0) 2024.02.11