개발 및 연구 정보

java에서 arraylist 소팅하기

바보천사 2015. 1. 12. 09:27

정말 간단한건데....

잘 쓰질 않으니...몰랐던것...


특정 타입의 클래스(자료구조용) 오브젝트를 arraylist에 넣고, 

정렬할때.


1. 우선, 자료구조용 클래스 정의할때. 비교 가능하도록 하도록    

    implements Comparable<ClassName>

    삽입하여 클래스 선언

2. 비교 함수를 오버라이딩 하여 구현

    public int compareTo(ClassName objName)

    구현 클래스내 멤버 변수와, 파라미터 클래스내 멤버 변수의 차이값을 반환하되

    오름/내림 차순을 고려하여, 적절히 음/양으로 반환

3. 다음과 같은 구문으로 정렬. 끝

    Collections.sort(arraylist)


매우 간단..ㅡㅡ;;..

이럴때 가끔 보면..나 별로 코딩 잘 안한듯..ㅡㅡ;.

http://beginnersbook.com/2013/12/java-arraylist-of-object-sort-example-comparable-and-comparator/


Sorting of ArrayList<Object> with Comparable

Let’s say we need to sort the ArrayList<Student> based on the student Age property. This is how it can be done – First implement Comparable interface and then Override the compareTo method.

package beginnersbook.com;
public class Student implements Comparable {
    private String studentname;
    private int rollno;
    private int studentage;
    public Student(int rollno, String studentname, int studentage) {
        this.rollno = rollno;
        this.studentname = studentname;
        this.studentage = studentage;
    }
    ...
    //getter and setter methods same as the above example 
    ...
    @Override
    public int compareTo(Student comparestu) {
        int compareage=((Student)comparestu).getStudentage();
        /* For Ascending order*/
        return this.studentage-compareage;
        /* For Descending order do like this */
        //return compareage-this.studentage;
    }
    @Override
    public String toString() {
        return "[ rollno=" + rollno + ", name=" + studentname + ", age=" + studentage + "]";
    }
}

Now we can very well call Collections.sort on ArrayList

import java.util.*;
public class ArrayListSorting  {
	public static void main(String args[]){
	   ArrayList<Student> arraylist = new ArrayList<Student>();
	   arraylist.add(new Student(223, "Chaitanya", 26));
	   arraylist.add(new Student(245, "Rahul", 24));
	   arraylist.add(new Student(209, "Ajeet", 32));
	   Collections.sort(arraylist);
	   for(Student str: arraylist){
			System.out.println(str);
	   }
	}
}

Output:

[ rollno=245, name=Rahul, age=24]
[ rollno=223, name=Chaitanya, age=26]
[ rollno=209, name=Ajeet, age=32]