-
[Java] 자바 기본 API - Arrays ClassCSE/Java 2016. 4. 16. 13:55
자바 기본 API는 여러 절로 구성되어 있습니다.
StringTokenizer, StringBuffer, StringBuilder Class
Regular Expression & Pattern Class
Arrays Class
Arrays 클래스는 배열 조작 기능을 가지고 있습니다. 배열 조작이랑 배열 복사, 항목 정렬, 항목 검색과 같은 기능을 말합니다. 단순한 배열 복사는 System.arraycopy() 메소드를 사용할 수 있으나, Arrays 는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공해줍니다.
다음은 Arrays 클래스가 가지고 있는 메소드들입니다.
배열 복사
배열 복사를 위해 사용할 수 있는 메소드는 copyOf() 와 copyOfRange() 입니다. 다음은 arr1[] 배열의 전체 항목을 복사해서 arr2[] 배열을 생성합니다.
12char[] arr1 = {'A', 'P', 'P', 'L', 'e'};char[] arr2 = Arrays.copyOf(arr1, arr1.length);cs copyOfRange() 는 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열을 리턴합니다. 이때 주의사항은 끝 인덱스는 포함하지 않습니다.
12char[] arr1 = {'A', 'P', 'P', 'L', 'e'};char[] arr2 = Arrays.copyOfRange(arr1, 1, 4); // result PPLcs 간단한 예제를 살펴봅시다.
* ArrayCopyExam.java
123456789101112131415161718192021222324252627package api;import java.util.Arrays;public class ArrayCopyExam {public static void main(String[] args) {char[] arr1 = {'a', 'p', 'p', 'l', 'e'};// Method copyOfchar[] arr2 = Arrays.copyOf(arr1, arr1.length);System.out.println(Arrays.toString(arr2));// Method copyOfRangechar[] arr3 = Arrays.copyOfRange(arr2, 1, 4);System.out.println(Arrays.toString(arr3));// Method System.arraycopychar[] 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
1234567891011121314151617181920212223242526272829package api;import java.util.Arrays;public class EqualsExam {public static void main(String[] args) {int[][] origin = { {1, 3}, {5, 7} };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
12345678910111213141516171819package 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
1234567891011121314151617181920212223242526272829303132333435363738package api;import java.util.Arrays;public class SortExam {public static void main(String[] args) {int[] scores = {100, 95, 90};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* 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.'CSE > Java' 카테고리의 다른 글
[Java] 자바 기본 API - Date, Calendar Class (0) 2016.04.16 [Java] 자바 기본 API - Math, Random Class (0) 2016.04.16 [Java] 자바 기본 API - Wrapper Class (0) 2016.04.16 [Java] 자바 기본 API - 정규 표현식과 Pattern Class (0) 2016.04.16 [Java] 자바 기본 API - StringTokenizer, StringBuffer, StringBuilder Class (0) 2016.03.29 [Java] 자바 기본 API - String Class (0) 2016.03.29