Set는 중복을 허용하지 않는다.
자바 Set인터페이스를 구현한 대표적인 클래스는 hashSet과 ReeSet이 있다.
➕ 만약 중복된 자료를 추가하면, 추가가 되지 않고 별도의 예외나 오류는 나지 않는다.
⚠️ 구현할 타겟 클래스에 Comparable<전달객체 명시>를 해야한다.
package collection;
//Comparable<전달객체 명시> 인터페이스 구현
public class Member implements Comparable<Member> {
private int memberId;
private String memberName;
public Member(int memberId, String memberName) {
this.memberId = memberId;
this.memberName = memberName;
}
...
@Override
public int compareTo(Member member) {
return (this.memberId - member.memberId);
}
}
package colletion.arrlist;
import collection.Member;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSerTest {
public static void main(String[] args) {
TreeSet<Member> memberTreeSet = new TreeSet<>();
memberTreeSet.add(new Member(1003, "강감찬"));
memberTreeSet.add(new Member(1001, "홍길동"));
memberTreeSet.add(new Member(1002, "김예진"));
memberTreeSet.add(new Member(1004, "이연희"));
Iterator<Member> ir = memberTreeSet.iterator();
while (ir.hasNext()) {
Member member = ir.next();
System.out.println(member);
}
}
}
👉 실행화면
홍길동 회원님의 아이디는 1001입니다.
김예진 회원님의 아이디는 1002입니다.
강감찬 회원님의 아이디는 1003입니다.
이연희 회원님의 아이디는 1004입니다.
@Override
public int compareTo(Member member) {
return (member.memberId - this.memberId );
}
이연희 회원님의 아이디는 1004입니다.
강감찬 회원님의 아이디는 1003입니다.
김예진 회원님의 아이디는 1002입니다.
홍길동 회원님의 아이디는 1001입니다.
⚠️ 구현할 타겟 클래스에 Comparartor<전달객체 명시>를 해야한다.
⚠️ 사용할 TreeSet객체 생성시에 매개변수로 구현한 타겟 객체를 명시해야한다.
package collection;
import java.util.Comparator;
public class Member implements Comparator<Member> {
private int memberId;
private String memberName;
@Override
public int compare(Member o1, Member o2) {
return (o1.memberId - o2.memberId);
}
}
package colletion.arrlist;
import collection.Member;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSerTest {
public static void main(String[] args) {
//생성시에 객체 전달!
TreeSet<Member> memberTreeSet = new TreeSet<>(new Member(1001,"안녕"));
memberTreeSet.add(new Member(1003, "강감찬"));
memberTreeSet.add(new Member(1001, "홍길동"));
memberTreeSet.add(new Member(1002, "김예진"));
memberTreeSet.add(new Member(1004, "이연희"));
Iterator<Member> ir = memberTreeSet.iterator();
while (ir.hasNext()) {
Member member = ir.next();
System.out.println(member);
}
}
}
👉 실행화면
홍길동 회원님의 아이디는 1001입니다.
김예진 회원님의 아이디는 1002입니다.
강감찬 회원님의 아이디는 1003입니다.
이연희 회원님의 아이디는 1004입니다.
package collection;
import java.util.Comparator;
public class Member implements Comparator<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 String toString() {
return memberName + " 회원님의 아이디는 " + memberId + "입니다." ;
}
@Override
public int compare(Member o1, Member o2) {
return (o2.memberId-o1.memberId);
}
}
package colletion.arrlist;
import collection.Member;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSerTest {
public static void main(String[] args) {
//요거는 따로 저장되지는 않는다.
TreeSet<Member> memberTreeSet = new TreeSet<>(new Member(1001,"안녕"));
memberTreeSet.add(new Member(1003, "강감찬"));
memberTreeSet.add(new Member(1001, "홍길동"));
memberTreeSet.add(new Member(1002, "김예진"));
memberTreeSet.add(new Member(1004, "이연희"));
Iterator<Member> ir = memberTreeSet.iterator();
while (ir.hasNext()) {
Member member = ir.next();
System.out.println(member);
}
}
}
👉 실행화면
이연희 회원님의 아이디는 1004입니다.
강감찬 회원님의 아이디는 1003입니다.
김예진 회원님의 아이디는 1002입니다.
홍길동 회원님의 아이디는 1001입니다.
@Override
public int compare(Member o1, Member o2) {
return (o2.memberName.charAt(0)-o1.memberName.charAt(0));
}
홍길동 회원님의 아이디는 1001입니다.
이연희 회원님의 아이디는 1004입니다.
김예진 회원님의 아이디는 1002입니다.
강감찬 회원님의 아이디는 1003입니다.
Set인터페이스는 중복을 방지하기 때문에 equals()와 hashcode()를 재정의해야하고,
TreeSet은 정렬을 하기 때문에 Comparable 인터페이스와 Comparartor 인터페이스 구현을 해야한다.