Comparable 인터페이스와 Comparator 인터페이스
- 정렬 대상이 되는 클래스가 구현해야하는 인터페이스
- Comparable은 compareTo() 메서드를 구현
매개변수와 객체 자신(this)를 비교
- Comparator는 compare() 메서드를 구현
두개의 매개 변수를 비교
TreeSet 생성자에 Comparator가 구현된 객체를 매개변수로 전달
TreeSet<Member> treeSet = new TreeSet<Member>(new Member()); |
- 일반적으로 Comparable을 더 많이 사용
- 이미 Comparable이 구현된 경우 Comparator를 이용하여 다른 정렬 방식을 정의 할 수 있다.
============
Member class
============
package treeset;
import java.util.Comparator;
//public class Member implements Comparable<Member> {
public class Member implements Comparator<Member> {
private int memberId;
private String memeberName;
public Member() {}
@Override
public int hashCode() {
return memberId;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member)obj;
return (this.memberId==member.memberId);
}
return false;
}
public Member(int memberId,String memberName) {
this.memberId=memberId;
this.memeberName=memberName;
}
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public String getMemeberName() {
return memeberName;
}
public void setMemeberName(String memeberName) {
this.memeberName = memeberName;
}
public String toString() {
return memeberName +"회원님의 아이디는 "+memberId+"입니다.";
}
// @Override
// public int compareTo(Member member) {
//
//// return (this.memberId - member.memberId);
//// return (this.memberId - member.memberId)*(-1);
// return this.memeberName.compareTo(member.getMemeberName());//이름순으로
// }
@Override
public int compare(Member member1, Member member2) {
// TODO Auto-generated method stub
return (member1.memberId-member2.memberId);
}
}
============
Treeset class
============
package treeset;
import java.util.Iterator;
import java.util.TreeSet;
//HashSet을 통한 Member관리
public class MemberTreeSet {
private TreeSet<Member> treeSet;
public MemberTreeSet() {
//Comparable으로 정렬할경우
//treeSet = new TreeSet<Member>();
//comparator로 정렬할경우
treeSet = new TreeSet<Member>(new Member());
}
public void addMember(Member member) {
treeSet.add(member);
}
//해당하는 멤버가 있는 경우 삭제 아닌경우 존재 하지 않는다는 메시지 출력
public boolean removeMember(int memberId){
Iterator<Member> ir = treeSet.iterator();
while(ir.hasNext()) {
Member member = ir.next();
if(member.getMemberId()==memberId) {
treeSet.remove(member);
return true;
}
}
System.out.println(memberId+"번호가 존재하지 않습니다.");
return false;
}
public void showAllMember() {
for(Member member: treeSet) {
System.out.println(member);
}
System.out.println();
}
}
================
treesettest class
================
package treeset;
public class MemberTreeSetTest {
public static void main(String[] args) {
MemberTreeSet manager = new MemberTreeSet();
Member memberLee = new Member(300,"LEE");
Member memberKim = new Member(100,"Kim");
Member memberPark = new Member(200,"Park");
//전체
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
//회원에 아이디 별로 정렬
//처음에는 정렬이 안된다-> 그이유는 정렬에대한 기준이 설정되어 있지 않으므로.
//멤버클래스에 Comparable<Member> 추가해줘서 기준을 값들을 코딩 한 후 실행하면
//정상적으로 정렬이 이뤄진다.아래와 같이 정렬
// @Override
// public int compareTo(Member member) {
//
// return (this.memberId - member.memberId); 100,200,300
// return (this.memberId - member.memberId)*(-1); 300,200,100
// return this.memeberName.compareTo(member.getMemeberName());//이름순으로
// }
manager.showAllMember();
}
}
Comparator을 사용하여 다른 방식으로 정렬하고 싶은 경우에 아래와 같이하면된다.
생성자를 정렬하는 곳에 넣어서 사용.
package treeset;
import java.util.Comparator;
import java.util.TreeSet;
//Comparator 사용해서 재정의
class MyCompare implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2)*(-1);
}
}
public class ComparatorTest {
public static void main(String[] args) {
//(new MyCompare()을 재정의 한후<String>()괄호 안에 넣어서 사용한다.
TreeSet<String> treeSet = new TreeSet<String>(new MyCompare());
treeSet.add("홍길동");
treeSet.add("강감찬");
treeSet.add("이순신");
for(String str:treeSet) {
System.out.println(str);
}
}
}
반응형
'JAVA' 카테고리의 다른 글
내부클래스 (0) | 2019.10.13 |
---|---|
Map인터페이스 (2) | 2019.10.12 |
set 인터페이스 (0) | 2019.10.10 |
Stack과 Queue (0) | 2019.10.09 |
List 인터페이스 (0) | 2019.10.08 |