강좌 & 팁
글 수 2,412
2012.09.01 19:26:59 (*.52.177.29)
96544
java에서 List정렬에 대해 알아보도록 하겠습니다.
Collections.sort를 사용하면 쉽게 정렬할수 있습니다.
Collections이기때문에 Collection을 implements 하는 List, Map, Vector등을 정렬할 수 있습니다.
정렬 하기 위해서는 Comparator을 implements해서 사용하면 됩니다.
예제를 보고 잘 따라해보세요.
먼저 이름, 주소, 전화번호를 갖고 있는 오브젝트를 만듭니다.
public class User { private String name; private String address; private String phone; public User() { } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the address */ public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the phone */ public String getPhone() { return phone; } /** * @param phone the phone to set */ public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { // TODO Auto-generated method stub StringBuilder str = new StringBuilder(); str.append("name=").append(name).append(", "); str.append("address=").append(address).append(", "); str.append("phone=").append(phone); return str.toString(); } }
그다음은 메인 소스입니다.
[샘플소스]
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class JavaCompareTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<User> users = getCreateUsers(); System.out.println("===== 정렬 하기전 ====="); for (User temp : users) { System.out.println(temp); } Collections.sort(users, new NameAscCompare()); System.out.printf("\n\n===== 오름 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); } Collections.sort(users, new NameDescCompare()); System.out.printf("\n\n===== 내림 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); } } /** * User Data Create * @return */ private static List<User> getCreateUsers() { // TODO Auto-generated method stub List<User> users = new ArrayList<User>(); User user = new User(); user.setName("고철수"); user.setAddress("경기도 성남시 분당구"); user.setPhone("010-1234-0192"); users.add(user); user = new User(); user.setName("박영희"); user.setAddress("부산 해운대"); user.setPhone("010-4234-0192"); users.add(user); user = new User(); user.setName("감수왕"); user.setAddress("충북 제천"); user.setPhone("010-7234-0192"); users.add(user); user = new User(); user.setName("이사람"); user.setAddress("강원도 영울"); user.setPhone("010-0234-0192"); users.add(user); return users; } /** * 이름 오름차순 * @author falbb * */ static class NameAscCompare implements Comparator<User> { /** * 오름차순(ASC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg0.getName().compareTo(arg1.getName()); } } /** * 이름 내림차순 * @author falbb * */ static class NameDescCompare implements Comparator<User> { /** * 내림차순(DESC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg1.getName().compareTo(arg0.getName()); } } }
[실행 결과]
어렵지 않죠!!
몰라서 어려운거지 알면 어렵지 않아요.(당연할 말이 겠지만....^^;)
다음시간에는 숫자 정렬을 해보겠습니다.
거의 똑같고 몇줄만 틀린데 한꺼번에 올리기엔 너무 길어 질것 같아서...^^;
그럼, 다음 시간을 기대주세요.
감사합니다.