ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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:티스토리]

     

    댓글

Designed by Tistory.