관리 메뉴

100세까지 코딩

[자바 공부] Arrays 메서드 정리 본문

JAVA

[자바 공부] Arrays 메서드 정리

100세까지 코딩 2023. 9. 8. 18:59

java.util.Arrays

Arrays 클래스는 배열에 대해 정렬, 검색, 비교 등의 메서드를 제공한다.

대표적인 메서드를 알아보자.

 

1) Arrays.Sort(arr)

 

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,7,9,6,5,8,10};
        Arrays.sort(arr);
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

결과 :

 

가장 많이 쓰인다해도 과언이 아니다.
arr 배열을 오름차순으로 정리해 주는 기능이다.

1-1) Arrays.Sort(arr,Collections.reverseOrder())

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Integer [] arr = {1,2,3,4,7,9,6,5,8,10};
        Arrays.sort(arr,Collections.reverseOrder());
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

결과 : 

 

내림차순으로 정리할 때 쓰는 메서드다.
Collections는 Object를 상속한 클래스에 대해 사용 가능한 인터페이스이므로
Wrapper 클래스로 만들거나 박싱 하는 과정을 거쳐야 한다.

1-2) Arrays.Sort(arr, Comparator())

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int[][] arr = {{1,500},{2,400},{3,300},{4,200}};

        Comparator<int[]> comparator1 = new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0]; // 앞에 값에 대한 오름차순
            }
        };
        System.out.println("---앞 값에 대한 정렬---");
        Arrays.sort(arr,comparator1);
        for(int[] a : arr) { // for each 반복문
          System.out.println(a[0] + " " + a[1]);
        }

        Comparator<int[]> comparator2 = new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1]-o2[1]; // 뒤에 값에 대한 오름차순
            }
        };

        System.out.println("---뒤 값에 대한 정렬---");
        Arrays.sort(arr,comparator2);
        for(int[] a : arr) { // for each 반복문
            System.out.println(a[0] + " " + a[1]);
        }
    }
}

결과 :

객체 배열 또는 2차원 배열은 Comparator의 compare메서드를 구현하여 사용한다.
사용자가 정의하기에 다양한 정렬을 구현할 수 있다.

2) Arrays.CopyOf(arr, arr.length)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] arr2 = Arrays.copyOf(arr, arr.length);

        for(int i : arr2) {
            System.out.print(i+" ");
        }
    }
}

결과 :

Arrays.CopyOf(복사할 배열, 복사할 길이)이다.
arr.length를 넣으면 끝까지 다 복사가 된다.

2-1) Arrays.CopyOfRange(arr, start Index, end Index)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] arr2 = Arrays.copyOfRange(arr,2,5);

        for(int i : arr2) {
            System.out.print(i+" ");
        }
    }
}

결과 :

Arrays.CopyOfRange(복사할 배열, 복사 시작 인덱스, 복사 끝 인덱스)이다.
복사 끝 인덱스는 복사에 포함되지 않는다.
만약 배열의 길이를 넘어 복사한다면 0 또는 null로 채워진다.

3) Arrays.binarySearch(arr, 찾을 값)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        String[] arr = {"1","2","5","4","3"};
        System.out.println("--정렬 전 찾기--");
        System.out.println(Arrays.binarySearch(arr,"3"));

        System.out.println("--정렬 후 찾기--");
        Arrays.sort(arr);
        System.out.println(Arrays.binarySearch(arr,"3"));
    }
}

결과 :

정렬한 후 사용하면 찾는 항목의 인덱스 값을 리턴한다.
그러나, 정렬을 하지 않고 사용하거나 찾는 값이 없으면 음수값을 리턴한다.

4) Arrays.fill(arr, 채울 값)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        String[] arr = {"1","2","5","4","3"};

        Arrays.fill(arr,"3");
        for(String str : arr) {
            System.out.print(str+" ");
        }
    }
}

결과 :

배열을 원하는 값으로 채우거나 초기화하고 싶을 때 사용하면 유용하다.

5) Arrays.equals(arr, arr2) , Arrays.deepEquals(arr, arr2)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        String[] arr = {"1","2","3","4","5"};
        String[] arr2 = {"1","2","5","4","3"};
        String[] arr3 = {"1","2","3","4","5"};

        System.out.println("배열1과 배열2 비교");
        System.out.println(Arrays.equals(arr,arr2));

        System.out.println("배열1과 배열3 비교");
        System.out.println(Arrays.equals(arr,arr3));
    }
}

결과 :

arr과 arr2에 저장된 값들이 같은지 비교해 주는 메서드이다.
다차원 배열은 저장된 값들이 같더라도 주소를 비교하기 때문에 false가 리턴된다.
이때는 deepEquals를 사용해 주면 된다.

6) Arrays.toString(arr) , Arrays.deepToString(arr2)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        String[] arr = {"1","2","5","4","3"};
        String[][] arr2 = {{"A","B"},{"C","D"}};

        System.out.print(Arrays.toString(arr));
        System.out.println();
        System.out.print(Arrays.deepToString(arr2));
    }
}

결과 : 

arr을 출력해 주는 메서드이다.
다차원 배열은 비교와 마찬가지로 deep을 사용하면 제대로 출력된다.
배열은 다루는 일이 많으니 기억하자!!