Array 클래스

OneTwoThree·2023년 7월 19일
0

자바

목록 보기
11/19

출처 : 열혈 Java 프로그래밍


java.util.Arrays 클래스는 배열 조작에 도움을 주는 메소드들로 구성되었다. 배열의 복사, 비교, 정렬, 탐색 관련 코드를 쉽게 작성할 수 있다.

배열 복사

public static int[] copyOf(int[] original, int newLength)

  • original에 저날된 배열을 첫 번째 요소부터 newLength의 길이만큼 복사한다.
    public static int[] copyOfRange(int[] original, int from, int to)
  • from 인덱스부터 to 인덱스 전까지 복사한다.

복사 해서 새로운 배열을 생성하고 그 참조값을 반환한다.

배열 비교

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

  • a와 a2 배열을 비교해 true 또는 false 반환
  • 두 배열에 저장된 데이터의 수, 순서, 내용이 같아야함
    public static boolean equals(Object[] a, Object[] a2)
  • 인스턴스의 참조 값을 저장하고 있는 두 배열에 대해 비교를 진행함
  • 참조하는 대상이 같아야함
  • 이 때 Objec 클래스의 equals 메소드를 사용함
  • 참조 대상이 아닌 값 자체가 같은지를 비교 하고 싶으면 equals를 객체에서 오버라이딩 해주자

배열의 정렬

public static void sort(int[] a)

  • 배열에 저장된 데이터를 오름차순으로 정렬한다
    public static void sort(Object[] a)
  • 다음과 같이 Object 배열에 대해서도 오버로딩 되어 있다
  • 이 때는 비교 기준으로 삼기 위해 Comparable 인터페이스의 int compareTo(Object O) 메소드를 구현해야 함

구현 방법은 다음과 같다. 정렬 기준을 정하고 정렬 후에

  • 인자로 전달된 o가 작다면 양의 정수 반환
  • 인자로 전달된 o가 크다면 음의 정수 반환
  • 인자로 전달된 o와 같다면 0을 반환

굉장히 헷갈리는데 그냥 이렇게 생각하면 된다.
오름차순 : this - o 반환
내림차순 : o - this 반환

import java.util.Arrays;

class Number{
    int num;

    public Number(int n){
        num = n;
    }

    @Override
    public String toString() {
        return "Number{" +
                "num=" + num +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Number[] arr = { new Number(3), new Number(2), new Number(1)};

        Arrays.sort(arr,(a,b)->a.num-b.num); //오름차순 
        for (Number n : arr){
            System.out.println("n = " + n);
        }

        System.out.println("--------------------");

        Arrays.sort(arr,(a,b)->b.num-a.num); //내림차순 
        for (Number n : arr){
            System.out.println("n = " + n);
        }

    }
}

위와 같이 람다식을 활용해 비교 조건에 대한 식을 인자로 넘길 수 있다.

  • (a,b)->a-b : 오름차순
  • (a,b)->b-a : 내림차순

배열의 탐색

public static int binarySearch(int[] a, int key)
이진탐색으로 배열 a에서 key를 찾아서 있으면 key의 인덱스 값 반환, 없으면 음수를 반환한다.
이 메소드는 이진탐색을 사용하기 때문에 정렬된 상태의 배열에만 사용해야 한다.
그리고 Object 형에 사용할 경우 Object 형에 오버라이딩 한 compareTo 메소드가 0이 반환되는 원소를 찾았다고 판단한다.

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

정말 깊이 있는 글이었습니다.

답글 달기