고급자바
Collection 객체 정렬하기-22.03.25
AIN99
2022. 3. 25. 11:57
728x90
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class T04_ListSortTest {
public static void main(String[] args) {
List<Member> memList=new ArrayList<Member>();
memList.add(new Member(1,"홍길동","010-1111-1111"));
memList.add(new Member(5,"변학도","010-1111-2222"));
memList.add(new Member(9,"성춘향","010-1111-3333"));
memList.add(new Member(3,"이순신","010-1111-4444"));
memList.add(new Member(6,"강감찬","010-1111-5555"));
memList.add(new Member(2,"일지매","010-1111-6666"));
System.out.println("정렬전");
for(Member mem: memList) {
System.out.println(mem);
}
System.out.println("-----------------------------------");
Collections.sort(memList);
System.out.println("정렬후");
for(Member mem: memList) {
System.out.println(mem);
}
System.out.println("-----------------------------------");
//외부 정렬 기준을 이용한 정렬하기
Collections.sort(memList, new SortNumDec());
System.out.println("정렬 후(번호의 내림차순 정렬)...");
for(Member mem: memList) {
System.out.println(mem);
}
System.out.println("-----------------------------------");
}
}
원래는 별도로 선언해야함 하지만 여기서 같이 구현
--Member에 오류뜨면 첫번째 눌러주기! 오버라이드해줘야함, --객체자체 정렬은 Comparable
class Member implements Comparable<Member>{
private int num; //번호
private String name; //이름
private String tel; //전화번호
public Member(int num, String name, String tel) {
super();
this.num = num;
this.name = name;
this.tel = tel;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
}
//이름을 기준으로 오름차순 정렬이 되도록 설정한다.
@Override
public int compareTo(Member mem) {
return this.getName().compareTo(mem.getName());
}
외부정렬자 선언 ,--Member의 번호(num)의 내림차순으로 정렬하기
class SortNumDec implements Comparator<Member>{
@Override
public int compare(Member mem1, Member mem2) {
/*if(mem1.getNum()>mem2.getNum()) {
return -1; //원래는 1이지만 내림이므로
}else if(mem1.getNum()==mem2.getNum()) {
return 0;
}else {
return 1; //mem2가 더 큰경우
}*/
//wrapper클래스에서 제공하는 메서드를 이용하는 방법
return new Integer(mem1.getNum()).compareTo(mem2.getNum())*-1;
}
}
728x90