2월 15, 2024

[Arrays.fill()] 한꺼번에 배열 채우기

 오늘은 자바 배열을 사용할 때 for문을 돌지 않고 한꺼번에 초기화를 시켜주거나 특정 값을 모든 배열 index에 넣어주고 싶을 때 유용한 메서드를 소개하려고 한다.


바로 Arrays.fill()이라는 메서드이다. 


이 메서드가 필요한 이유는 조금 더 편리하게 배열을 초기화하기 위해서이다.


만약 이 메서드를 사용하지 않는다면, 예를 들어 

int arr[]=new int [n];

이라는 메서드가 있고 모든 index에 해당하는 값을 -1로 초기화하고 싶을 때 우리는

for(int i=0; i<n; i++){
 arr[i]=-1;
}

이런식으로 for문을 돌면서 초기화를 해야 한다. 

만약 총 개수를 모를 경우에는 n 대신 arr.length 같은 것을 사용하면서 조금 더 번거롭다.


 

만약 이것이 이중 배열이었다면 for 문을 두 번 써야 하는 불편함이 있다.

int arr[][]=new int[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
 arr[i][j]=2;
}
}

위의 코드처럼 말이다. 

 


오늘 소개할 Arrays.fill()을 쓰면 이러한 불편함을 한번에 해결할 수 있다. 

int arr[]=new int [n];

위의 배열이 있고, arr 배열의 모든 index에 해당하는 값을 -1로 초기화하고 싶다면 우리는 for문을 돌릴 필요 없이,

Arrays.fill(arr, -1);

이라고 적어줄 수 있다. 

 

만약 3부터 6 index 까지만 -1로 채워주고 싶다면, 

Arrays.fill(arr,3,7,-1);

이라고 적어주면 된다. 끝 인덱스는 포함되지 않기 때문에 내가 6 index까지 하고 싶다면 코드에서는 7이라고 해야 한다.



2차원 배열의 경우 일일히 우리가 채울 경우에는 for문을 2번 돌려야 하지만, Arrays.fill()을 사용하면 for문을 1번만 써도 된다.

int arr[][]=new int [n][n];
for(int i=0; i<n; i++){
 Arrays.fill(arr[i], -1);
}

이런식으로 for문을 한번만 사용해서 2중 배열을 채울 수 있다. 



편리한 기능이지만 아직 많은 사람들이 그래도 for문을 돌리는 것을 선호하는 것 같다. 워낙 익숙한 문법이어서 큰 불편함은 없지만 가끔 Arrays.fill()을 활용해보는 것도 좋을 것 같다.