Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

정렬을 위한 TreeSet 활용 본문

Java/자료구조

정렬을 위한 TreeSet 활용

Seung__ 2021. 10. 25. 21:47

1. TreeSet 활용


  • 객체의 정렬에 사용
  • Set인터페이스를 구현하여 중복을 허용하지 않음. 오름차순이나 내림차순으로 정렬 가능
  • binary Search Tree로 구현됨
  • 비교 대상이 되는 객체에 Comparable 이나 Comparator 인터페이스를 구현해야 TreeSet에 추가 가능
  • String, Integer등 많은 클래스가 이미 Comparable 구현해둠
  • Element가 추가될 때 마다 기존에 있는 element와 비교를 어떻게 할것인지를 정의해 줘야함
    • HashSet의 경우 element가 추가될 때 마다 기존의 element와 동일한지 check한 것과 같은 맥락
    • HashSet -> equals(), hashCode()
  • TreeSet을 사용하기 위해서는 해당 클래스에 Comparable or Comparator 구현해야함.

 

 

2. TreeSet 사용


  • TreeSet에 Member를 담을 예정이다.
  • 따라서 Member는 Comparable or Comparator구현이 필요하다.
  • Comparable implements하면 compateTo를 구현해야 한다. compareTo는 int를 반환하는데,
  • traverse시 오름차순으로 정렬하고 싶으면 this가 argument보다 작으면 음수, 크면 양수 같으면 0 return하면됨.
public class Member implements Comparable<Member>{

   ...
   
   @Override
    public int compareTo(Member member) {

        return (this.memberId - member.getMemberId());
    }
}

 

 

 

3. Test


  • 정렬이 되는지 확인하기 위해 순서를 섞어서 add해보자.
    @BeforeEach
    void beforeTest(){

        memberTreeSet = new MemberTreeSet();

        Member member1 = new Member(1001, "A");
        Member member2 = new Member(1002, "B");
        Member member3 = new Member(1003, "C");
        Member member4 = new Member(1004, "D");

        memberTreeSet.addMember(member1);
        memberTreeSet.addMember(member3);
        memberTreeSet.addMember(member4);
        memberTreeSet.addMember(member2);

    }
  • arraryList사용한 것 과 동일한 테스트이다. 

 

 

 

 

4. Comparator 구현한 경우


  • compare()를 구현해줘야 한다.
  • 이 때 넘어오는 변수는 2개이고 2개를 가지고 비교하면 된다.
    @Override
    public int compare(Member member1, Member member2) {

        return (member1.getMemberId() - member2.getMemberId());
    }
  • 주의!!!
  • Comparator를 사용하는 경우 TreeSet 사용 시 대상 클래스는 지정해야 한다.
  • new TreeSet<대상 Class>(Comparator구현한 클래스)
    • 대상 Class와 Comparator를 구현한 클래스는 다를 수 있음. Comparator를 별도로 만들 수 있음
    public MemberTreeSet() {
        treeSet = new TreeSet<Member>(new Member());
    }
  • 일반적으로 Comparable을 자주 사용하며, 이미 comparable이 구현된 경우 Comparator를 사용함.

 

 

5. GitHub: 211025 TreeSet


 

GitHub - bsh6463/dataStructure

Contribute to bsh6463/dataStructure development by creating an account on GitHub.

github.com

 

Comments