할 일 목록
https://school.programmers.co.kr/learn/courses/30/lessons/181885
문제 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import java.util.ArrayList; import java.util.List; class Solution { public String[] solution(String[] todo_list, boolean[] finished) { List<String> answerList = new ArrayList<>(); for (int i = 0; i < todo_list.length; i++) { if (!finished[i]) { answerList.add(todo_list[i]); } } String[] answer = answerList.toArray(new String[0]); return answer; } }
String[] answer = {};
: 배열의 길이가 0인 빈 배열을 생성한다. 따라서 값을 추가할 때마다 배열의 크기가 늘어나지 않고,ArrayIndexOutOfBoundsException
오류가 발생하는 원인이 될 수 있다. 초기화된 빈 배열 대신에ArrayList
를 사용하여 필요한 값만을 추가한 후, 이를toArray
메서드를 사용하여 배열로 변환한다.ArrayList
에 저장된 요소들을toArray()
메서드로 배열로 변환할 때 인자로new String[0]
을 전달하면, 내부적으로는 적절한 크기의 새로운 배열이 생성되어 그 크기에 맞게 요소들이 복사된다.ArrayList
의 크기가 배열의 크기와 일치하지 않아도 새로운 배열이 필요한 경우마다 크기를 조절하는 비용을 피할 수 있게 한다.new String[0]
대신에new String[answerList.size()]
를 사용하면 비슷한 결과를 얻을 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.