Java 정렬 기법

JavaBeginner
지금 연습하기

소개

정렬은 컴퓨터 과학에서 필수적인 작업이며, Java는 다양한 데이터 구조를 정렬할 수 있는 여러 내장 메서드와 클래스를 제공합니다. 이 실습에서는 배열, 컬렉션, 그리고 사용자 정의 클래스 인스턴스를 정렬하는 방법을 단계별로 학습합니다.

배열 정렬

배열은 동일한 유형의 데이터를 순차적으로 저장하는 간단한 데이터 구조입니다. Arrays 클래스의 내장 sort() 메서드를 사용하여 배열을 정렬할 수 있습니다.

~/project 디렉토리에 Sorting.java 파일을 생성하거나 기존 파일을 다음 코드로 교체하세요:

import java.util.Arrays;

public class Sorting {
    public static void main(String[] args) {
        int[] arr = {7, 9, 1, 0, 2, 5, 6, 11};
        System.out.println("Array Before Sorting: " + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("Array After Sorting: " + Arrays.toString(arr));
    }
}

코드를 실행하려면 터미널에서 ~/project 디렉토리로 이동한 후 다음 명령어를 실행하세요:

javac Sorting.java
java Sorting

이 코드는 배열을 오름차순으로 정렬합니다. 만약 내림차순으로 정렬하고 싶다면 Comparator 인터페이스를 사용해야 합니다.

컬렉션 정렬

Java는 리스트(List), 세트(Set), 맵(Map)과 같은 컬렉션을 정렬하기 위한 sort() 메서드를 포함한 Collections 클래스를 제공합니다. 이 함수의 작동 방식은 Arrays 클래스의 sort() 메서드와 유사합니다.

~/project 디렉토리에 Sorting.java 파일을 생성하거나 기존 파일을 다음 코드로 교체하세요:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sorting {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(6);
        list.add(3);
        list.add(8);
        list.add(1);
        list.add(9);

        System.out.println("List before sorting: " + list);

        Collections.sort(list);
        System.out.println("List after sorting: " + list);
    }
}

코드를 실행하려면 터미널에서 ~/project 디렉토리로 이동한 후 다음 명령어를 실행하세요:

javac Sorting.java
java Sorting

세트 정렬

세트(Set)는 중복을 허용하지 않고 순서가 없는 데이터를 저장하는 데 사용됩니다. Collections 클래스의 sort() 메서드를 사용하여 세트를 직접 정렬할 수는 없습니다. 하지만 세트의 모든 요소를 리스트로 옮긴 다음 리스트를 정렬함으로써 정렬된 데이터를 확인할 수 있습니다.

~/project 디렉토리에 Sorting.java 파일을 생성하거나 기존 파일을 다음 코드로 교체하세요:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Sorting {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();
        set.add(6);
        set.add(3);
        set.add(-2);
        set.add(1);
        set.add(9);

        List<Integer> list = new ArrayList<Integer>(set);
        Collections.sort(list);
        System.out.println("Set after sorting: " + list);
    }
}

코드를 실행하려면 터미널에서 ~/project 디렉토리로 이동한 후 다음 명령어를 실행하세요:

javac Sorting.java
java Sorting

이 코드의 출력 결과는 정렬된 정수 리스트가 됩니다.

맵 정렬

맵(Map)은 키-값 쌍을 저장하는 데 사용됩니다. 맵은 키 또는 값을 기준으로 정렬할 수 있습니다. TreeMap을 사용하면 키-값 쌍을 정렬된 상태로 저장할 수도 있습니다.

~/project 디렉토리에 Sorting.java 파일을 생성하거나 기존 파일을 다음 코드로 교체하세요:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Sorting {
    public static void main(String[] args) {
        Map<Integer, String> map = new TreeMap<Integer, String>();
        map.put(6, "Apple");
        map.put(3, "Banana");
        map.put(1, "Mango");
        map.put(9, "Orange");

        System.out.println("Map before sorting: " + map);

        // Sorting by keys
        Map<Integer, String> sortedByKeyMap = new TreeMap<Integer, String>(map);
        System.out.println("Map after sorting by keys: " + sortedByKeyMap);

        // Sorting by value
        List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        Map<Integer, String> sortedByValueMap = new LinkedHashMap<Integer, String>();
        for (Map.Entry<Integer, String> entry : list) {
            sortedByValueMap.put(entry.getKey(), entry.getValue());
        }
        System.out.println("Map after sorting by values: " + sortedByValueMap);
    }
}

코드를 실행하려면 터미널에서 ~/project 디렉토리로 이동한 후 다음 명령어를 실행하세요:

javac Sorting.java
java Sorting

이 코드는 맵을 키와 값 기준으로 각각 정렬합니다.

요약

이번 실습에서는 Java에서 다양한 데이터 구조를 정렬하는 방법을 살펴보았습니다. 배열, 컬렉션, 맵을 정렬하는 방법을 배웠으며, ComparableComparator 인터페이스를 사용하여 사용자 정의 클래스 객체를 정렬하는 방법도 익혔습니다. 리스트와 배열을 정렬하기 위해 CollectionsArrays 클래스의 sort() 메서드를 사용했으며, 마지막으로 맵을 값과 키 기준으로 정렬하는 방법까지 학습했습니다.