Free Lines Arrow
본문 바로가기
Language/Java

[Java] Sort

by skahn1215 2021. 5. 29.
728x90
반응형

Java의 Sort

간단하게 java에서 sort 하는 방법을 알아보자

 

Array Sort

간단하기 때문에 바로 예제 코드를 작성해본다.

 

package com.company;

import java.util.*;

public class SortTest {

    public static void main(String[] args) {
        // Array sort
        String [] languageArray = new String[4];
        languageArray[0] = "JAVA";
        languageArray[1] = "C";
        languageArray[2] = "C++";
        languageArray[3] = "PYTHON";

        // Before sort
        System.out.println("Before Sort");
        for(int i = 0; i < languageArray.length; i++) {
            System.out.println(languageArray[i]);
        }

        // sort
        Arrays.sort(languageArray);

        // After sort
        System.out.println("After Sort");
        for(int i = 0; i < languageArray.length; i++) {
            System.out.println(languageArray[i]);
        }
    }
}

 

 

 

Collections를 이용한 ArrayList Sort

ArrayList 같은경우 Collection을 기반으로 하기 때문에

Collections.sort 로 정렬을 해줄수 있다.

 

package com.company;

import java.util.*;

public class SortTest {

    public static void main(String[] args) {
        //collection sort

        List<String> languageList= new ArrayList<String>();
        languageList.add("JAVA");
        languageList.add("C");
        languageList.add("C++");
        languageList.add("PYTHON");
        
        Collections.sort(languageList);

        for(String language : languageList) {
            System.out.println(language);
        }

    }
}

 

 

 

객체 Sort

Array.sort(object, compareTo()) 로 객체를 정렬할수가 있다.

왜냐 하면 어떤 정보를 가지고 정렬할 것인지 정해 주어야한다.

그렇기 때문에 사용자가 작성한 compare 함수가 있어야한다.

 

사용자가 정의 한 기본클래스이다.

여기에 compareTo 함수를 작성해 주어야한다.

 

Language Class

package com.company;

public class Language {

    public String name;
    public int value;
    public Language(String name, int value) {
        this.name = name;
        this.value = value;
    }
}

 

1. CompareTo 함수로 Sort

package com.company;

public class Language {

    public String name;
    public int value;
    public Language(String name, int value) {
        this.name = name;
        this.value = value;
    }

    // sort를 위한 compare 함수
    public int compareTo(Language other) {
        return name.compareTo(other.name);
    }
}

 

main 함수

package com.company;
import java.util.Arrays;
public class SortTest {

    public static void main(String[] args) {
        Language [] languageArray = new Language[4];
        languageArray[0] = new Language("JAVA", 70);
        languageArray[1] = new Language("C", 10);
        languageArray[2] = new Language("C++", 20);
        languageArray[3] = new Language("PYTHON", 40);

        // Arrays.sort(languageArray); error
        Arrays.sort(languageArray,Language::compareTo);

        for( Language language : languageArray) {
            System.out.println(language.name);
        }

    }
}

 

2. Comparator Interface를 사용하여 Sort

  • 만약에 name과 value 값을 기준으로 각각 sort를 하려면?
  • compareTo 함수를 하나더 만들어 주면 될까?
  • compareTo 함수의 시그니쳐가 동일하기 때문에 문제가 있다.
  • Comparator 객체를 사용하자

 

Language Class

package com.company;

import java.util.Comparator;

public class Language {

    public String name;
    public int value;
    public Language(String name, int value) {
        this.name = name;
        this.value = value;
    }

    // added name compare obj for sort
    public static Comparator<Language> nameComparator = new Comparator<Language>() {
        public int compare(Language lhs, Language rhs) {
            return lhs.name.compareTo(rhs.name);
        }
    };


    // added value compare obj for sort
    public static Comparator<Language> valueComparator = new Comparator<Language>() {
        public int compare(Language lhs, Language rhs) {
            return lhs.value - rhs.value;
        }
    };

}

 

main 함수

package com.company;
import java.util.Arrays;
import java.util.Comparator;

public class SortTest {

    public static void main(String[] args) {
        Language [] languageArray = new Language[4];
        languageArray[0] = new Language("JAVA", 70);
        languageArray[1] = new Language("C", 10);
        languageArray[2] = new Language("C++", 20);
        languageArray[3] = new Language("PYTHON", 40);

        // sort by name
        System.out.println("Sort Name");
        Arrays.sort(languageArray, Language.nameComparator);
        for( Language language : languageArray) {
            System.out.println(language.name);
        }

        System.out.println();

        // sort by value
        System.out.println("Sort Value");
        Arrays.sort(languageArray, Language.valueComparator);
        for( Language language : languageArray) {
            System.out.println(language.name);
        }
    }
}

 

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] Annotation  (0) 2021.08.20
[Java] Collection Framework  (0) 2021.08.20
[Java] Lambda  (0) 2021.08.06
[Java] ArrayList to String[]  (0) 2021.05.23
[Java] ArrayList  (0) 2021.05.10

댓글