Comparable과 Comparator 인터페이스

이진석·2022년 8월 17일
1
post-thumbnail

20220818

한 번에 끝내는 Java/Spring 웹 개발 마스터

  • Comparabe
  • Comparator

1) Member 클래스

public class Member implements Comparable<Member> {

	private int memberId; // 회원 아이디
	private String memberName; // 회원 이름

	public Member(int memberId, String memberName) { // 생성자
		this.memberId = memberId;
		this.memberName = memberName;
	}

	public int getMemberId() { //
		return memberId;
	}

	public void setMemberId(int memberId) {
		this.memberId = memberId;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	@Override
	public int hashCode() {
		return memberId;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Member) {
			Member member = (Member) obj;
			if (this.memberId == member.memberId)
				return true;
			else
				return false;
		}
		return false;
	}

	@Override
	public String toString() { // toString 메소드 오버로딩
		return memberName + " 회원님의 아이디는 " + memberId + "입니다";
	}

	@Override
	public int compareTo(Member member) {
		
		if(this.memberId > member.memberId)
			return 1;
		else if(this.memberId < member.memberId)
			return -1;
		else
			return 0;
	}
}

2) MemberTreeSet 클래스

import java.util.TreeSet;
import java.util.Iterator;

public class MemberTreeSet {

	private TreeSet<Member> treeset;

	public MemberTreeSet() {
		treeset = new TreeSet<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();
			int tempId = member.getMemberId();
			if (tempId == 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();
	}
}

3) Comparator 클래스

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

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) {
		
		Set<String> set = new TreeSet<String>(new MyCompare());
		set.add("aaa");
		set.add("ccc");
		set.add("bbb");
				
		System.out.println(set);
	}
}

TreeSet & Comparator

  • 객체의 정렬에 사용하는 클래스이다.
  • 이진검색트리(binary search tree)로 구현된다.
  • 비교 대상이 되는 객체에 Comparable이나 Comparator 인터페이스를 구현 해야 TreeSet에 추가 될 수 있음 (매우 중요하다)
  • 이미 Comparable이 구현된 경우에는 Comparator로 비교하는 방식을 다시 구현할 수 있다.
profile
혼자서 코딩 공부하는 전공생 초보 백엔드 개발자 / https://github.com/leejinseok0614

0개의 댓글