Arrays class 메소드(배열 복사, 배열 항복 정렬, 배열 항목 검색, 배열 동일 항목 채우기, 배열(Array) 항목 비교
Arrays 클래스는 항목 정렬, 항목 검색, 항목 비교와 같은 메소드들을 제공한다
모든 메소드는 static(정적) 메소드이므로, Aarays 클래스로 바로 사용이 가능하다
배열 복사
char[] arr2 = Arrays.copyOf(arr1, arr1.length);
// arr1 배열 arr1.length 만큼을 arr2로 복사
char[] arr3 = Arrays.copyOfRange(arr1, 1, 3);
// arr1[1] ~ arr1[2] 를 arr3[0] ~ arr3[1] 로 복사
// 1~3에서 끝 인덱스는 포함되지 않는다
배열 항목 정렬
Arrays.sort(arr);
기본 타입 또는 String 배열은
위와 같이 arr 배열을 사전순(오름차순)으로 정렬할 수 있다
만약 사용자 정의 클래스 타입이라면, Comparable 인터페이스를 구현하고 있어야 한다 (implements)
다음과 같이 Member 클래스를 작성해보자
// Member 타입만 비교하기 위해 제네릭 <> 사용
class Member implements Comparable<Member> {
String name;
Member(String name)
this.name = name;
@Override
int compareTo(Memeber m)
return name.compareTo(m.name);
// 내림차순일 때는 *(-1) 를 하여 -1, 0, 1를 구분한다
}
public class Example {
public static void main(String[] args) {
Member m1 = new Member("aa");
Member m2 = new Member("bb");
Member m3 = new Member("cc");
Member[] members = {m1, m2, m3};
Arrays.sort(members);
}
}
배열 항목 검색
Arrays.sort() 메소드로 정렬을 한 후에,
Arrays.binarySearch() 메소드로 원하는 항목의 인덱스 값을 찾을 수 있다
( 정렬을 하지 않은 후에 binarySearch() 메소드를 사용하거나, 없는 항목을 찾으면 음수값이 리턴된다.
// Member[] members = {"aa", "bb", "cc"}; 일 때
Arrays.sort(members);
int idx = Arrays.binarySearch(members, "bb");
// idx == 1
배열 동일 항목 채우기
fill() 메소드로 배열에 동일한 값을 저장할 수 있다
void fill(배열, 값)
void fill(배열, 시작인덱스, 끝인덱스, 값)
배열(Array) 항목 비교 - Arrays Class
arr1.equals(arr2) : 배열의 번지 비교
Arrays.equals(arr1, arr2) : 배열의 1차 항목값만 비교
Arrays.deepEquals(arr1, arr2) : 중첩 배열의 모든 항목값 비교
예시로, 다음은 이것이 자바다 배열 비교 코드이다
public static void main(String[] args) {
int[][] arr1 = { {1,2}, {3,4} };
// 얕은 복사
int[][] arr2 = Arrays.copyOf(arr1, arr1.length);
// arr1.equals(arr2) -> false
// Arrays.equals(arr1, arr2) -> true
// Arrays.deepEquals(arr1, arr2) -> true
// 깊은 복사
int[][] arr3 = Arrays.copyOf(arr1, arr1.length);
arr3[0] = Arrays.copyOf(arr1[0], arr1[0].length);
arr3[1] = Arrays.copyOf(arr1[1], arr1[1].length);
// arr1.equals(arr3) -> false
// Arrays.equals(arr1, arr3) -> false
// Arrays.deepEquals(arr1, arr3) -> true
copyOf() 메소드는 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사하여 반환한다
정리하자면,
arr1.equals(arr2) 는 파란색 상자 Object 끼리의 값과 주소 비교
Arrays.equals(arr1, arr2) 는 Object의 주소는 달라도 참조값은 같나 비교
Arrays.deepEquals(arr1, arr2) 는 Object와 참조값의 주소는 달라도 값은 같나 비교를 의미한다
출처: https://snupi.tistory.com/52 [SNUPI:티스토리]