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