2021. 7. 8. 03:51ㆍComputer Science/JAVA
1. Arrays.sort()
[개념 및 특징]
º java.util.Arrays 클래스를 사용하여 배열(Array)을 정렬
º sort() 메소드를 사용하며 기본 오름차순으로 정렬
º 특정 인덱스(index) 부분만 정렬 가능
º 내림차순 정렬시 java.util.Collections reverseOrder() 메소드 사용
- 기본 타입으로는 사용이 불가이므로 래퍼클래스로 만들어 Comparator를 두번째 인자에 넣어준다.
[소스코드]
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
String strArray[] = {"n","c","aa","jj","kkkkk"};
int intArray[] = {66,4233,898,31,454,788,12};
int idxArray[] = {779,195,88,45,36,55,6,33};
Integer integerArray[] = {66,4233,898,31,454,788,12};
//String 배열 정렬
Arrays.sort(strArray);
//int 배열 정렬
Arrays.sort(intArray);
//특정 idx만 정렬 (int[2] ~ int[6])
Arrays.sort(idxArray,2,7);
//Integer 배열 정렬(내림차순)
Arrays.sort(integerArray,Collections.reverseOrder());
System.out.println("[String 오름차순 정렬]");
for(String s : strArray) {
System.out.print(s + " ");
}
System.out.println("\n");
System.out.println("[int 오름차순 정렬]");
for(int i : intArray) {
System.out.print(i + " ");
}
System.out.println("\n");
System.out.println("[특정 idx 오름차순 정렬 (2~6)]");
for(int idx : idxArray) {
System.out.print(idx + " ");
}
System.out.println("\n");
System.out.println("[Integer 내림차순 정렬]");
for(int i : integerArray) {
System.out.print(i + " ");
}
}
}
[결과]
2. Collections.sort()
[개념 및 특징]
º java.util.Collections 클래스를 사용하여 List 인터페이스 하위 클래스 ArrayList, LinkedList를 정렬
º Arrays.sort()와 같이 sort() 메소드를 사용하며 기본 오름차순 정렬
º 내림차순 정렬시 java.util.Collections reverseOrder() 메소드 사용
[소스코드]
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> intlist = new ArrayList<>();
intlist.add(66);
intlist.add(4233);
intlist.add(898);
intlist.add(31);
intlist.add(454);
intlist.add(788);
intlist.add(12);
ArrayList<String> strlist = new ArrayList<>();
strlist.add("n");
strlist.add("c");
strlist.add("aa");
strlist.add("jj");
strlist.add("kkkkk");
//Integer List 정렬
Collections.sort(intlist);
//String List 정렬
Collections.sort(strlist);
System.out.println("[Integer list 정렬]");
for(Integer i : intlist) {
System.out.print(i + " ");
}
System.out.println("\n");
//Integer List 내림차순 정렬
Collections.sort(intlist,Collections.reverseOrder());
System.out.println("[Integer list 내림차순 정렬]");
for(Integer i : intlist) {
System.out.print(i + " ");
}
System.out.println("\n");
System.out.println("[String list 정렬]");
for(String s : strlist) {
System.out.print(s + " ");
}
System.out.println("\n");
}
}
[결과]
3. Comparable
[개념 및 특징]
º 사용자가 임의로 만든 객체를 정렬할때 주로 사용하는 인터페이스
º static <T extends Comparable<? super T>>void sort(List<T> list) 에서 나와있듯이 제네릭 <T>에 Comparable 인터페이스를 상속 시킨다.
º 임의로 만든 class에서 Comparable 인터페이스 메소드인 compareTo()를 Override시켜 정렬 방법을 정의
º 오름차순 정렬시 Override한 compareTo() 메소드에서 다음과 같이 정의
(1) 맴버변수가 매개변수 값보다 크면 return 1
(2) 맴버변수가 매개변수 값보다 작으면 return -1
(3) 맴버변수와 매개변수 값이 같다면 return 0
[소스코드]
import java.util.ArrayList;
import java.util.Collections;
class Node implements Comparable<Node>{
int x,y;
Node(int x,int y){
this.x = x;
this.y = y;
}
@Override
public int compareTo(Node o) {
// TODO Auto-generated method stub
if(this.x > o.x) {
return 1;
}else if(this.x == o.x) { //x값이 동일하다면 y값을 기준으로 오름차순 정렬
if(this.y > o.y){
return 1;
}else if(this.y < o.y) {
return -1;
}
return 0;
}
return -1;
}
}
public class Main {
public static void main(String[] args) {
List<Node> list = new ArrayList<>();
list.add(new Node(1,2));
list.add(new Node(2,6));
list.add(new Node(2,1));
list.add(new Node(2,3));
list.add(new Node(0,3));
list.add(new Node(3,3));
Collections.sort(list);
for(Node n : list) {
System.out.println(n.x + " " + n.y);
}
}
}
[결과]
4. Comparator
[개념 및 특징]
º Comparable과 마찬가지로 임의로 만든 객체를 정렬할때 주로 사용하는 인터페이스
º static <T> void sort(List<T> list, Comparator<? super T> c) 에서 나와있듯이 Collections.sort() 메소드가 overloading 되어 있어 Comparator 인스턴스를 인자로 전달
º 오름차순 정렬시 compare(T t1, T t2) 메소드에서 다음과 같이 정의
(1) t1 > t2 이면 return 1
(2) t1 < t2 이면 return -1
(3) t1 == t2 이면 return 0
[소스코드]
※ 아래 예시 코드는 String 길이를 기준으로 오름차순 정렬을 하며 만약 길이가 같을시 int 값 기준으로 오름차순 정렬
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Student{
String name;
int age;
Student(String name, int age){
this.name = name;
this.age = age;
}
}
class StudentComp implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
if(s1.name.length() > s2.name.length()) {
return 1;
}else if(s1.name.length() == s2.name.length()) { //name 길이가 똑같을시 age 기준으로 오름차순 정렬
if(s1.age > s2.age) {
return 1;
}else if(s1.age < s2.age) {
return -1;
}
return 0;
}
return -1;
}
}
public class Main {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student("kevinmaguire", 28));
list.add(new Student("HarryKane", 40));
list.add(new Student("alvaroMorata", 15));
list.add(new Student("joseMurinuho", 55));
list.add(new Student("sergio", 22));
list.add(new Student("buseketue", 21));
list.add(new Student("cristianoronaldo", 49));
list.add(new Student("vanpe", 37));
Collections.sort(list, new StudentComp());
for(Student s : list) {
System.out.println(s.name + " " + s.age);
}
}
}
[결과]
Reference
- https://ifuwanna.tistory.com/232
- https://coding-factory.tistory.com/549
- https://wjheo.tistory.com/entry/Java-%EC%A0%95%EB%A0%AC%EB%B0%A9%EB%B2%95-Collectionssort
'Computer Science > JAVA' 카테고리의 다른 글
[JAVA] JVM 메모리 구조 (0) | 2020.04.15 |
---|