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 |
댓글