Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링 핵심 원리
- 알고리즘
- Thymeleaf
- 백준
- transaction
- Exception
- 그리디
- spring
- Spring Boot
- 자바
- Greedy
- QueryDSL
- 스프링 핵심 기능
- SpringBoot
- Servlet
- pointcut
- AOP
- jpa
- springdatajpa
- kotlin
- JDBC
- db
- Android
- Proxy
- 스프링
- 김영한
- 인프런
- java
- http
- JPQL
Archives
- Today
- Total
개발자되기 프로젝트
정렬을 위한 TreeSet 활용 본문
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
'Java > 자료구조' 카테고리의 다른 글
Pair로 관리하는 Map (0) | 2021.10.25 |
---|---|
중복 허용하지 않는 Set 인터페이스 (0) | 2021.10.25 |
Collection 요소를 순회하는 Iterator (0) | 2021.10.24 |
List 인터페이스를 구현한 클래스, 활용 (0) | 2021.10.24 |
컬렉션 프레임워크 (0) | 2021.10.24 |
Comments