[JAVA] SORT 사용 정리

2021. 7. 8. 03:51Computer 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