JAVA 기초 (36) Set 인터페이스

코린이서현이·2023년 8월 13일
0

Java

목록 보기
37/46

😿들어가면서😿

Set는 중복을 허용하지 않는다.
자바 Set인터페이스를 구현한 대표적인 클래스는 hashSet과 ReeSet이 있다.

📕 HashSet 클래스

  • 집합 자료를 구현하며, 저장순서가 유지되지 않고, 중복을 허용하지 않는다.
    💡 많은 양의 데이터를 저장하는데 적합하다.

➕ 만약 중복된 자료를 추가하면, 추가가 되지 않고 별도의 예외나 오류는 나지 않는다.

📖 중복을 허용하지 않기 위해서 equals()와 hashcode() 재정의

  • HashSet으로 저장할 객체가 직접 만든 객체라면 equals()와 hashcode() 오버라이딩을 해야한다.
  • 같은 값으로 판단할 수 있도록!!

📘 HashSet 메소드

더 알아보기

📕 TreeSet 클래스

  • 자료의 중복을 허용하지 않으면서 출력 결과 값을 정렬하는 클래스이다.

📖 중복을 허용하지 않기 위해서 equals()와 hashcode() 재정의

  • TreeSet으로 정렬할 객체가 직접 만든 객체라면 equals()와 hashcode() 오버라이딩을 해야한다.
  • 같은 값으로 판단할 수 있도록!!

📖 정렬을 위한 Comparable 인터페이스와 Comparartor 인터페이스

  • TreeSet으로 정렬할 객체에 Comparable 인터페이스와 Comparartor 인터페이스를 구현해야한다.
  • Comparable 인터페이스 : 자기 자신과 전달받은 매개변수를 비교
  • Comparartor 인터페이스 : 두 매개변수를 비교
    ⚠️ Comparartor를 사용해 정렬하고 싶을 때에는 TreeSet생성할 때, Comparartor를 구현한 객체를 매개변수로 전달해야한다.

📘 Comparable 인터페이스 : compareT0() 메소드

⚠️ 구현할 타겟 클래스에 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 인터페이스 : compare() 메소드

⚠️ 구현할 타겟 클래스에 Comparartor<전달객체 명시>를 해야한다.
⚠️ 사용할 TreeSet객체 생성시에 매개변수로 구현한 타겟 객체를 명시해야한다.

  • 이미 Comparable 인터페이스가 구현되어 있는 String을 재정의하고 싶을 때 사용한다.

📒 오름차순 정렬 (자기자신 - 전달객체)

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입니다.

➕ memberName으로 정렬/내림차순

  @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 인터페이스 구현을 해야한다.  
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글