[Java] Arrays 클래스의 메소드

이준영·2023년 12월 6일
0

🟫 Java

목록 보기
13/21

Arrays 클래스

배열과 관련된 연산을 할 때 유용하게 사용할 수 있는 클래스

Arrays 클래스의 배열 복사 메소드

copyOf(int[] original, int newlength)

Arrays.copyOf(arr1,arr1.length);

새로운 배열을 생성 후 복사
original에 전달된 배열을 첫 번째 요소부터 newLength의 길이만큼 복사



copyOfRange(int[] original, int from , int to)

Arrays.copyOfRange(arr1,1,4);

새로운 배열을 생성 후 복사
original에 전달된 배열을 인덱스 from 부터 to 이전 요소까지 복사



arraycopy(Object src, int srcPos, Object dext, int dextPos, int length)

System.arraycopy(org,1,copy,2,3);

기존의 존재하는 배열에 복사
배열 src의 srcPos에서 배열 dest의 destPos로 length만큼 복사



Arrays 메소드의 내용 비교 메소드

public static boolean equals(int[] a, int[] a2)

매개변수 a와 a2로 전달된 배열의  
내용을 비교하여 true 또는 false 반환

Arrays.equals() 메소드 일부
for (int i=0; i<length; i++) {
	Object o1 = a[i];
    Object o2 = a2[i];
    
    if (!(o1==null ? o2==null : o1.equals(o2)))
    	return false;
}

❗️ Arrays.equals()메소드는 배열의 인스턴스 하나하나를 비교하여 true false를 반환하게 됩니다. 각각의 인스턴스는 equals() 를 통해 비교하기 때문에, 만약 Object의 equals를 Override 하지 않은 클래스의 배열이라면 ex) Car[] 인스턴스 간의 equals가 참조값을 비교하게 되어 false가 반환됩니다.


Arrays 클래스의 sort 메소드

public static void sort(int[] a)

정수를 오름차순으로 정렬해 줍니다.

❗️ 정수 대신 인스턴스를 정렬 할 경우 ❗️

인스턴스는 정렬하는데 기준이 필요하기 때문에

정렬할 인스턴스의 클래스에 Comparable 인터페이스를 구현 해주고 해당 인터페이스의 메소드인 compareTo 메소드를 원하는 정렬 기준으로 오버라이딩 해주어야 합니다.

compareTo(Object o)
return 값
- 양수 (비교한 두 수 위치 변경)
- 음수 (위치 변경 x)
- 0 (위치 변경 X)
@Override
public int compareTo(Object o) { // 나이의 오름차순 정렬
	Person p = (Person) o;
	return this.age - p.age;
}
오름차순으로 정렬하고 싶다면 전달된 o의 값이 더 작으면 양수를 반환, o의 값이 더 크면 음수를 반환, 같다면 0을반환하게 구현하면 됩니다.
class Person implements Comparable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Object o) { // 나이의 오름차순 정렬
        Person p = (Person) o;
		return this.age - p.age;
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}

public class Main {

    public static void main(String[] args) {

        Person[] ar = new Person[3];

        ar[0] = new Person("Lee", 29);
        ar[1] = new Person("Goo", 15);
        ar[2] = new Person("Soo", 37);

        Arrays.sort(ar);

        for (Person p : ar)
            System.out.println(p);
    }
}


Arrays 클래스의 탐색 메소드

public static int binarySearch(int[] a, int key)

binarySearch()는 탐색 이전에 데이터가 오름차순 정렬이 되어있어야 한다.

→ 배열 a 에서 key를 찾아서 있으면 key의 인덱스 값, 없으면 0보다 작은 수 반환

❗️ Array 의 binarySearch() 또한 Comparable 인터페이스의 compareTo() 메소드를 기반으로 일치 유무(return이 0인지) 를 판단하기 때문에 바로 위 person의 경우 이름이 다르고 나이만 일치할 경우에도 인덱스가 반환되게 됩니다.

[다양한 compareTo 함수 만들어보기]

profile
작은 걸음이라도 꾸준히

0개의 댓글