-
Arrays class 메소드(배열 복사, 배열 항복 정렬, 배열 항목 검색, 배열 동일 항목 채우기, 배열(Array) 항목 비교Java/Java 개인 공부 2022. 11. 1. 20:31
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:티스토리]