ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바 기본 API - Arrays Class
    CSE/Java 2016. 4. 16. 13:55

    자바 기본 API는 여러 절로 구성되어 있습니다.



    Intro

    Object Class

    Objects Class

    System Class

    Class Class

    String Class

    StringTokenizer, StringBuffer, StringBuilder Class

    Regular Expression & Pattern Class

    Arrays Class

    Wrapper Class

    Math, Random Class

    Date, Calendar Class

    Format Class

    java.time Package




    Arrays Class

     Arrays 클래스는 배열 조작 기능을 가지고 있습니다. 배열 조작이랑 배열 복사, 항목 정렬, 항목 검색과 같은 기능을 말합니다. 단순한 배열 복사는 System.arraycopy() 메소드를 사용할 수 있으나, Arrays 는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공해줍니다.


     다음은 Arrays 클래스가 가지고 있는 메소드들입니다. 


     






     

     배열 복사

      배열 복사를 위해 사용할 수 있는 메소드는 copyOf() 와 copyOfRange() 입니다. 다음은 arr1[] 배열의 전체 항목을 복사해서 arr2[] 배열을 생성합니다.



    1
    2
    char[] arr1 = {'A''P''P''L''e'};
    char[] arr2 = Arrays.copyOf(arr1, arr1.length);
    cs



      copyOfRange() 는 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열을 리턴합니다. 이때 주의사항은 끝 인덱스는 포함하지 않습니다.



    1
    2
    char[] arr1 = {'A''P''P''L''e'};
    char[] arr2 = Arrays.copyOfRange(arr1, 14); // result PPL
    cs



      

      간단한 예제를 살펴봅시다.


     * ArrayCopyExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package api;
     
     
    import java.util.Arrays;
     
    public class ArrayCopyExam {
        public static void main(String[] args) {
            char[] arr1 = {'a''p''p''l''e'};
            
            // Method copyOf
            char[] arr2 = Arrays.copyOf(arr1, arr1.length);
            System.out.println(Arrays.toString(arr2));
            
            // Method copyOfRange
            char[] arr3 = Arrays.copyOfRange(arr2, 14);
            System.out.println(Arrays.toString(arr3));
            
            // Method System.arraycopy
            char[] arr4 = new char[arr1.length];
            System.arraycopy(arr1, 0, arr4, 0, arr1.length);
            for (int i = 0; i < arr4.length; i++
                System.out.print(arr4[i]);
        }
    }
     
     
     
    cs







     배열 항목 비교

      Arrays의 equals()와 deepEquals()는 항목을 비교합니다. 


      다음 예제는 두 메서드의 차이를 보이는 예제입니다.



     * EqualsExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package api;
     
     
    import java.util.Arrays;
     
    public class EqualsExam {
        public static void main(String[] args) {
            int[][] origin = { {13}, {57} };
            
            System.out.println("[얕은 복제 후 비교]");
            int[][] clone1 = Arrays.copyOf(origin, origin.length);
            System.out.println("배열 번지 비교: " + origin.equals(clone1));
            System.out.println("1차 배열 항목값 비교: " + Arrays.equals(origin, clone1));
            System.out.println("중첩 배열 항목값 비교: " + Arrays.deepEquals(origin, clone1));
            
            System.out.println("\n[깊은 복제 후 비교]");
            int[][] clone2 = Arrays.copyOf(origin, origin.length);
            clone2[0= Arrays.copyOf(origin[0], origin[0].length);
            clone2[1= Arrays.copyOf(origin[1], origin[1].length);
            
            System.out.println("배열 번지 비교: " + origin.equals(clone2));
            System.out.println("1차 배열 항목값 비교: " + Arrays.equals(origin, clone2));
            System.out.println("중첩 배열 항목값 비교: " + Arrays.deepEquals(origin, clone2));
            
        }
    }
     
     
     
    cs








     배열 항목 정렬

      기본 타입 또는 String 배열은 Arrays.sort() 메소드의 파라미터로 지정해주면 자동으로 오름차순 정렬이 됩니다. 사용자 정의 클래스 타입이면 Comparable 인터페이스를 구현한 클래스가 있으면 됩니다. Member 배열에서 Member 객체들을 name 필드값으로 정렬하고 싶다면 다음과 같이 Member 클래스를 작성하면 됩니다.



     * Member.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package api;
     
     
    public class Member implements Comparable<Member> {
     
        String name;
        
        public Member(String name) {
            this.name = name;
        }
        
        public int compareTo(Member o) {
            return name.compareTo(o.name);
        }
     
    }
     
     
     
    cs




      Comparator<Member> 는 Member 타입만 비교하기 위해 Generic <>을 사용하였고, compareTo() 메소드는 비교값을 리턴하도록 오버라이딩했습니다. 


      compareTo 메소드의 리턴값은 오름차순 일 때 자신이 파라미터보다 낮을 경우 음수, 같을 경우 0, 높을 경우 양수를 리턴하면 됩니다. 내림차순일 때는 자신이 파라미터보다 낮을 경우 양수, 같을 경우 0, 높을 경우 음수를 리턴하면 됩니다.


      다음 예제는 배열 항목을 정렬하는 방법을 보여줍니다.



     * SortExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package api;
     
     
    import java.util.Arrays;
     
    public class SortExam {
        public static void main(String[] args) {
            int[] scores = {1009590};
            Arrays.sort(scores);
            
            for (int score : scores) {
                System.out.println(score);
            }
            
            Member m1 = new Member("Apple");
            Member m2 = new Member("iOS10");
            Member m3 = new Member("Good Lock");
            Member m4 = new Member("S7");
            Member m5 = new Member("Samsung");
            
            Member[] members = {m1, m2, m3, m4, m5};
            System.out.println("[정렬 전 멤버 이름 출력]");
            for (Member mem : members) {
                System.out.println(mem.name);
            }
            
            Arrays.sort(members);
            System.out.println("\n[정렬 후 멤버 이름 출력]");
            for (Member mem : members) {
                System.out.println(mem.name);
            }
            
            
        }
    }
     
     
     
    cs







    end

     


     * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.


    댓글

Designed by Tistory.