본문 바로가기
JAVA

[ JAVA ] List를 조건에 따라 정렬해 봅시다. (Collection.sort())

by 정윤재 2009. 8. 9.

 

DB에서 나오는 정보라면 order by 같은 것으로 정렬을 할 수 있습니다.

그런데 그렇지 않다면 어떻게 해야 할까요?

여기에 그 해결책이 있습니다.

Collection.sort(Object o1,Object o2) 라는 것이죠.

 o1에는 List 객체를, o2에는 리스트를 정렬할 조건을 넣어주면 됩니다.

여기서 주의 할 점은 o2는 implements 로  Comparator 를 구현해 주어야 한다는

겁니다. 이것은 compare(Object o1,Object o2)를 구현해 주는 것을 의미하며

return 값은 int 입니다.

return을 어떻게 해주면 되냐하면...

리스트의 앞에 나오게 할 조건에 return을 -1

뒤에 나오게 할 조건의 return 을 1

동등한 위치를 0 으로 주게 하면 됩니다.

문자 비교를 통해 알아 봅시다.


package test;
import java.util.*;
public class listTest {
 public static void main(String[] args){
  Vector vec = new Vector();
  vec.add("RRL(1)");
  vec.add("RRL");
  vec.add("RRL(8)");
  
  Collections.sort(vec,new comp());
  
  for(int i=0;i<vec.size();i++){
   System.out.println((String)vec.get(i));
  }
  
 }
}
------------------------------------------------
package test;import java.util.Comparator;public class comp implements Comparator{
 public int compare(Object o1,Object o2){
  String s1 = (String)o1;
  String s2 = (String)o2;
  
  return s1.compareTo(s2);
 }}

이것만 가지고는 잘 모르겠다구요?

int 로 구현한걸 보면 바로 아실수 있습니다.

package test;
import java.util.*;
public class listTest {
 public static void main(String[] args){
  Vector vec = new Vector();
  vec.add(1004);
  vec.add(233);
  vec.add(50001);
  
  Collections.sort(vec,new comp());
  
  for(int i=0;i<vec.size();i++){
   System.out.println((Integer)vec.get(i));
  }
  
 }
}
--------------------------------------------package test;import java.util.Comparator;public class comp implements Comparator{
 public int compare(Object o1,Object o2){
  int result = 0;
  int i1 = (Integer)o1;
  int i2 =   (Integer)o2;
  if(i1 < i2){
   result = -1;
  }else if(i1 > i2){
   result = 1;
  }else{
   result = 0;
  }
  
  return result;
 }}

여기서는 int 를 알아보기 쉽게 이렇게 썻지만 Integer는 compareTo() 가 있으므로

이걸로 쓰면 바로 됩니다.

궁금한 점이 있으면 댓글로 남겨주세요


댓글