[JAVA 배열의 정렬] 자바 Array, ArrayList 배열의 오름차순, 내림차순 정렬과 Wrapper와 Primitive는 무슨차이가 있을까?

2021. 11. 9. 23:42[JAVA]

반응형

이번엔 간단한 배열의 선언과 정렬 또 Wrapper클래스와 Primitive 기본 자료타입의 차이가 무엇인지 정리합니다.

1. Wrapper VS Primitve 

배열을 만들 때 문득 드는 생각이 있습니다.

int arr[] = {1,2,3,4}; arr 배열 선언

Integer arr[] = {1,2,3,4}; arr 배열 선언

엥 도대체 뭐가 다르지? 라는 생각.

int는 Primitive 기본 자료타입이고 Integer는 Wrapper 클래스입니다.

 

자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어집니다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있습니다. 이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문입니다. 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없습니다. 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 합니다.

 

여기가 정리가 너무 잘되어 있네요

https://coding-factory.tistory.com/547

2. Arrays Sort

        Integer[] b = {1,2,3,4};
        String[] string = {"a", "b", "c", "d"};

        Arrays.sort(string, Collections.reverseOrder()); // string 배열 내림차순
        for(int i =0; i<string.length;i++) {
            System.out.print(string[i] +" ");
        }
        System.out.println();

        Arrays.sort(b); // Integer 배열 오름차순 정렬
        for(int i =0; i<b.length;i++) {
            System.out.print(b[i] + " ");
        }

        Arrays.sort(b,Collections.reverseOrder()); // Integer 배열 내림차순 정렬
        for(int i =0; i<b.length;i++) {
            System.out.print(b[i] + " ");
        }
        System.out.println();

자 첫 번째로 Wrapper 클래스와 Primitive 기본 타입에 대해 먼저 이야기한 이유는

Collections.reverseOrder()메서드를 사용하기 위해서인데요.

int[] arr = {1,2,3,4} 로 선언 된 배열은 Array.sort(arr)로 오름차순 정렬은 되지만 Collections.reverseOrder() 내림차순 정렬은 하지 못합니다. 왜냐하면 Collections은 객체를 대상으로 하니까요. int 는 변수 자료형이지 객체 클래스가 아닙니다

그래서 Integer 래퍼 클래스로 배열을 만듭니다. 또 내부 수정이 불가하고 객체를 생성해서 수정해야하니까 캡슐화(?) 효과도 볼 수 있겠네요

3. ArrayList 정렬

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(5);
        arrayList.add(1);
        arrayList.add(3);
        arrayList.add(4);
        Collections.sort(arrayList); // 오름차순 정렬
        for(int i = 0; i<arrayList.size();i++) {
            System.out.print(arrayList.get(i) + " ");
        }
        System.out.println();

        Collections.sort(arrayList, Collections.reverseOrder()); // 내림차순 정렬
        for(int i = 0; i<arrayList.size();i++) {
            System.out.print(arrayList.get(i) + " ");
        }

 

위와 동일하지만 다른점은 Array.sort가 아닌 Collections 솔트 ! Collections에는 다양한 메소드가 있는데 다음 포스팅 때 적어볼께요.

 

4. 이들의 크기는 어떻게 구하나요?

        String st = "abcdefg"; // String은 length()
        st.length();

        String stArr[] = {"a","b","c","d"}; // String 배열은 length
        int stArrLength = stArr.length;
        
        int[] arr = {1,2,3,4}; // int 배열은 length
        int length = arr.length;
        
        ArrayList<Integer> arrList = new ArrayList<>(); // arraylist는 size()입니다!
        arrList.size();

 

반응형