[JAVA] 제네릭이 String 인 ArrayList 정렬하기 (ArrayList sort / String sort)

[JAVA] 제네릭이 String 인 ArrayList 정렬하기 (ArrayList sort / String sort)

문자열 “aaaa”, “aaa”, “aaab”, “aab” 를 정렬(오름차순 정렬)하면 다음과 같다.

[aaa, aaaa, aaab, aab]

문자열 “aaaa”, “aaa”, “aaab”, “aab” 를 역정렬(내림차순 정렬)하면 다음과 같다.

[aab, aaab, aaaa, aaa]

1. 문자열(String)의 오름차순 정렬​ (간단한 방법)

자바에서 ArrayList 를 정렬(오름차순으로 정렬)하려면 Collections.sort 메서드를 사용하면 된다.

제네릭(Generic)이 String 인 ArrayList 도 마찬가지다.

ArrayList<String> strList = new ArrayList<String>();

strList.add(“aaaa”);
strList.add(“aaa”);
strList.add(“aaab”);
strList.add(“aab”);

// 리스트를 오름차순으로 정렬
Collections.sort(strList);
System.out.println(strList);

결과

[aaa, aaaa, aaab, aab]

2. 문자열(String)의 내림차순 정렬​​ (간단한 방법)

ArrayList 를 역정렬(내림차순으로 정렬)하려면 Collections.sort 메서드를 사용하고, 이어서 Collections.reverse 메서드를 사용하면 된다.


ArrayList<String> strList = new ArrayList<String>();

strList.add(“aaaa”);
strList.add(“aaa”);
strList.add(“aaab”);
strList.add(“aab”);

// 리스트를 내림차순으로 정렬
Collections.sort(strList);

Collections.reverse(strList);
System.out.println(strList);

결과

[aab, aaab, aaaa, aaa]

3. 문자열(String)의 오름차순 정렬​ (Comparator 인터페이스의 compare 메서드를 직접 구현)

Comparator 인터페이스의 compare 메서드를 직접 구현해서 정렬하는 방법도 있다.

제네릭이 String 또는 Integer 일 때는 그다지 쓸모없어보이는데, 특수한 정렬 규칙을 적용하고 싶다거나 제네릭이 직접 만든 클래스일 경우 사용하면 좋다.

compare 메서드를 구현(임플리먼트)할 때, 0 을 리턴하면 순서가 바뀌지 않는다.

두 값이 같다면 0을 반환하고, 첫 번째 값이 크다면 양수(1)를, 두 번째 인자가 크다면 음수(-1)를 반환하면 된다.

 

    public static void main(String[] args) {

        ArrayList<String> strList = new ArrayList<String>();

        strList.add(“aaaa”);
        strList.add(“aaa”);
        strList.add(“aaab”);
        strList.add(“aab”);

        // 리스트를 오름차순으로 정렬
        Collections.sort(strList, new Comparator<String>() {

            @Override
            public int compare(String s1, String s2) {
                int result = 0;
                
                if (s1 == null) {
                    s1 = “”;
                }
                
                if (s2 == null) {
                    s2 = “”;
                }
                
                int len1 = s1.length();
                int len2 = s2.length();
                int len = (len1 < len2) ? len1 : len2;
                for (int i=0; i<len; i++) {
                    if (s1.charAt(i) > s2.charAt(i)) {
                        result = 1;
                        break;
                    } else if (s1.charAt(i) < s2.charAt(i)) {
                        result = -1;
                        break;
                    }
                }
                
                if (result == 0) {
                    if (len1 > len2) {
                        result = 1;
                    } else if (len1 < len2) {
                        result = -1;
                    }
                }
                
                return result;
            }
        });
        
        System.out.println(strList);
    }

결과

[aaa, aaaa, aaab, aab]

4. 문자열(String)의 내림차순 정렬​ (Comparator 인터페이스의 compare 메서드를 직접 구현)

항목 3번의 코드에서 부등호 방향만 바꿔주면 된다.

    public static void main(String[] args) {

        ArrayList<String> strList = new ArrayList<String>();

        strList.add(“aaaa”);
        strList.add(“aaa”);
        strList.add(“aaab”);
        strList.add(“aab”);

        // 리스트를 오름차순으로 정렬
        Collections.sort(strList, new Comparator<String>() {

            @Override
            public int compare(String s1, String s2) {
                int result = 0;
                
                if (s1 == null) {
                    s1 = “”;
                }
                
                if (s2 == null) {
                    s2 = “”;
                }
                
                int len1 = s1.length();
                int len2 = s2.length();
                int len = (len1 < len2) ? len1 : len2;
                for (int i=0; i<len; i++) {
                    if (s1.charAt(i) < s2.charAt(i)) {
                        result = 1;
                        break;
                    } else if (s1.charAt(i) > s2.charAt(i)) {
                        result = -1;
                        break;
                    }
                }
                
                if (result == 0) {
                    if (len1 < len2) {
                        result = 1;
                    } else if (len1 > len2) {
                        result = -1;
                    }
                }
                
                return result;
            }
        });
        
        System.out.println(strList);
    }

결과

[aab, aaab, aaaa, aaa]

#Java 문자열 정렬

#Java 문자열 쏘트

#Java 문자열 Sort

#Java 스트링 정렬

#Java 스트링 쏘트

#Java 스트링 Sort

#Java String 정렬

#Java String 정렬

#Java String 쏘트

#자바 문자열 정렬

#자바 문자열 쏘트

#자바 문자열 Sort

#자바 스트링 정렬

#자바 스트링 쏘트

#자바 스트링 Sort

#자바 String 정렬

#자바 String 정렬

#자바 String 쏘트