Collections.sort 정렬 문제
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ListSortTest02 {
public static void main(String[] args) {
ArrayList<Member> memList = new ArrayList<>();
memList.add(new Member(1, "홍길동", "010-1111-1111"));
memList.add(new Member(5, "이순신", "010-2222-1111"));
memList.add(new Member(9, "성춘향", "010-3333-1111"));
memList.add(new Member(3, "강감찬", "010-4444-1111"));
memList.add(new Member(6, "일지매", "010-5555-1111"));
memList.add(new Member(2, "변학도", "010-6666-1111"));
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 SortNumDesc());
System.out.println("회원번호의 내림차순 정렬후 ..");//입력한 순서 그대로
for(Member mem : memList){
System.out.println(mem);
}
System.out.println("--------------------------------------------");
}
}
//Member클래스의 회원이름을 기준으로 오름차순 정렬이 되도록
//내부 정렬 기준 추가하기 ==> Comparable 인터페이스를 구현한다.
//알트 쉽 s: 생성자 자동으로 만들기
class Member implements Comparable<Member>{//클래스 만들기
private int num; //회원번호
private String name;
private String tel;
public Member(int num, String name, String tel){//생성자만들기
this.num = num;
this.name = name;
this.tel = tel;
}
public void setNum(int num){//데이터 세팅 (알트 쉽 s)
this.num = num;
}
public int getNum(){
return this.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() {//뽑아줄 값 toString
return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
}
// 내부 정렬 기준을 설정하는 메서드 구현하기
//(회원이름의 오름차순 기준 설정)
@Override
public int compareTo(Member mem) {//괄호 속에 오는 것이 다른 멤버 클래스(this가 앞의 데이터 매개변수가 되는 데이터는 뒤의 데이터)
return this.getName().compareTo(mem.getName());
//이름값을 가져오고 타입에 따라 정렬 방식을 이용하여 사용함: this가 앞의 데이터 뒤에가 메개변수 데이터
}
}
//Member 클래스의 회원번호(num)를 기준으로 내림차순되는 외부정렬기준
//외부정렬기준 class를 작성하시오.(외부니까 클래스로 빼준거임)
class SortNumDesc implements Comparator <Member>{
@Override
public int compare(Member mem1, Member mem2) {
/*if(mem1.getNum() > mem2.getNum())
return -1;
//앞의 값이 크면 내림차순 이니까 리턴 값으로 음수가 나오고 값이 변하지 않음
}else if(mem1.getNum() < mem2.getNum()){
return 1;
//뒤의 값이 크면 내림차순이니까 순서가 바뀌어야 되고 리턴 값으로 양수가 나와야됨
}else{
return 0;
}*/
//Wrapper클래스를 이용하는 방법1
//return new Integer(mem1.getNum()).compareTo(mem2.getNum()) * -1;
//-1을 곱해주면 부호를 쉽게 바꿀 수 있음
//Wrapper클래스를 이용하는 방법2
return Integer.compare(mem1.getNum(), mem2.getNum()) * -1;
//compare는 static메서드
}
}
compare메서드의 반환값
- 반환값이 0 : 두 값이 같다.
- 반환값이 양수: 두 값의 순서를 바꾼다.
- 반환값이 음수: 두 값의 순서를 바꾸지 않는다.
Author And Source
이 문제에 관하여(Collections.sort 정렬 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@susan9905/정렬-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)