Arrays 클래스는 배열을 다루기 편리한 static 메서드들을 제공한다.
배열의 내용을 출력해준다. 일차원 배열은 toString(), 다차원 배열의 경우 deepToString()을 사용해야 한다.
//static String toString(Object[] a)
int[] arr = {1,2,3,4};
int[][] arr2D = {{11,12},{21,22}};
System.out.println(Arrays.toString(arr); //[1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D); //[[11, 12], [13, 14]]
두 배열이 동일한지 비교한다. 일차원 배열은 equals(), 다차원 배열의 경우 deepEquals()를 사용해야 한다.
int[] arr = {0,1,2};
int[] arr2 = {0,1,2};
Arrays.equals(arr,arr2); //true
int[][] arr2D = {{0,1},{1,2}};
int[][] arr2D2 = {{0,1},{1,2}};
Arrays.deepEquals(arr2D,arr2D2); //true
배열의 복사를 한다. copyOf는 해당 배열을 설정한 길이만큼 복사하며, copyOfRange는 해당 배열을 설정한 범위만큼 복사한다.
int[] arr = {1,2,3,4}; //1,2,3,4
int[] arr2 = Arrays.copyOf(arr,2); //1,2
//copyOfRange 시 기존 배열의 초과 범위는 0으로 채움
int[] arr3 = Arrays.copyOfRange(arr,1,5) //2,3,4,0
배열을 채운다. fill은 배열의 전체를 해당 값으로 채우고, setAll은 람다를 사용하여 배열 원소를 하나하나 채운다.
int[] arr = new int[5];
Arrays.fill(arr,3); //3,3,3,3,3
//setAll 두번째 인자로 람다 사용 및 난수로 채우기
Arrays.setAll(arr,(i)->(int)(Math.random()*5)+1);
배열을 정렬한다. 정렬의 기준에 대해서는 다음 참조.
Comparator과 Comparable
배열을 이분탐색한다. 이분탐색이기 때문에 정렬된 상태에서 사용해야 하며, 그렇지 않을 시 이상한 값이 나온다.
int[] arr = {6,3,8,10,1};
Arrays.sort(arr); //1,3,6,8,10
Arrays.binarySearch(arr,6); //idx=2
배열을 List로 변환한다. 🚫이 때 반환된 List는 읽기 전용이다. 따라서 만약 수정하고 싶다면 ArrayList 등의 생성자를 활용해야 한다.
int[] arr = {1,2,3,4};
List list = Arrays.asList(arr);
//list.add(5); //수정 불가
List list2 = new ArrayList(Arrays.asList(arr));
list2.add(5);