TreeSet 클래스
객체의 정렬에 사용되는 클래스이다.
중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬한다.
내부적으로 이진 검색 트리(binary search tree) 로 구현되어 있다
이진 검색 트리에 자료가 저장 될 때 비교하여 저장될 위치를 정한다.
객체 비교를 위해 Comparable 이나 Comparator 인터페이스를 구현 해야 한다.
정렬에 대한 메소드를 구현해줘야 한다.
package collectiontreeset;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<String>();
treeSet.add("홍길동");
treeSet.add("강감찬");
treeSet.add("이순신");
for(String str : treeSet) {
System.out.println(str);
// 이미 String 이 Comparable이 구현되어있어서 오름차순으로 출력된다.
}
}
}
TreeSet 회원의 아이디 순서대로 정렬을 하면서 중복도 안되고 싶다면 ?
package collectiontreeset;
public class MemberTreeSetTest {
public static void main(String[] args) {
MemberTreeSet manager = new MemberTreeSet();
// TreeSet 회원의 아이디 순서대로 정렬을 하고 싶다면 ?
Member memberLee = new Member(100,"이효리");
Member memberKim = new Member(200,"강감찬");
Member memberPark = new Member(300,"박범");
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
manager.showAllMember();
}
}
package collectiontreeset;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class MemberTreeSet {
// HashSet 으로 멤버들을 관리해 보기
private TreeSet<Member> treeSet;
public MemberTreeSet() {
treeSet = new TreeSet<Member>();
}
//멤버 한명 추가
public void addMember(Member member) { // 멤버가 매개변수로 넘어온다.
treeSet.add(member);
}
// 다른 객체랑 비교하는 구분 Comparable 를 구현해야 한다.
public boolean removeMember(int memberID) { // 멤버 아이디를 알아야지 해당하는 값을 삭제할수있다.
// 한명한명 봐야하니 Iterator 를 써야한다.
Iterator ir = treeSet.iterator();
if(ir.hasNext()) {
Member 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); // toString 구현된게 호출
}
System.out.println();
}
}
Comparable 인터페이스를 Member 를 기반으로 상속받는다.
package collectiontreeset;
public class Member implements Comparable<Member> {
// treeSet 을 사용하기 위한 Comparable <Member>를 기반으로
private int memberID;
private String memberName;
public Member() {}
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;
}
public String toString() {
return memberName + "회원님의 아이디는 " + memberID +" 입니다.";
}
// Set 에서 중복을 방지하려면 MemberID 값이 같으면 true로 리턴 , hashCode도 정의해줘야한다.
@Override
public boolean equals(Object obj) {
Member member = (Member)obj; // 다운캐스팅
if(member.memberID == memberID) {
return true;
} else {
return false;
}
}
@Override
public int hashCode() {
return memberID;
}
@Override
public int compareTo(Member member) { // this 나 하고 넘어온 매개변수랑 비교하면 된다.
// return (this.memberID - memberID); // 아이디순 내께 더컸을때 양수를 반환하게 되면 오름차순으로 정렬된다.
// return (this.memberID - memberID) * (-1); // 반대로 하면 내림차순으로 정렬된다.
return this.memberName.compareTo(member.getMemberName()); // 이름으로 정렬하고 싶으면
}
}
'JAVA Programming' 카테고리의 다른 글
[68] HashSet 으로 관리해보기 (0) | 2020.07.20 |
---|---|
[67] TreeSet 자료구조로 구현하기 (오름차순,내림차순,중복X) Comparator상속받을때 (0) | 2020.07.20 |
[65] Set 인터페이스 (Iterator 순회 , 중복x, 순서대로x) (0) | 2020.07.20 |
[63] ArrayList 에서 쓰이는 Stack , Queue구현하기 Static 에서 push() , pop() 구현하기 (0) | 2020.07.20 |
[61] 컬렉션 프레임 워크 란? (0) | 2020.07.20 |