Day 52

ChangWoo·2023년 5월 27일
0

자바의 정석

목록 보기
66/71
post-thumbnail

ch 11-30~33 Comparator와 Comparable

Comparator와 Comparable

  • 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
  • Comparable : 기본 정렬기준을 구현하는데 사용.
  • Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interface Comparatr {
	int compare(Object o1, Object o2); // o1, o2 두 객체를 비교 (양수 왼쪽이 큰 것 / 0이면 같다 / 음수면 오른쪽이 큰 것)
    boolean equals(Object obj); // equals를 오버라이딩하라는 뜻
}
public interface Comparable {
	int compareTo (Object o); / 주어진 객체(o)를 자신과 비교
}
  • Comparator와 Comparable는 두 대상을 비교한다는 점에서 공통점이 있지만, 비교하는 대상이 다르다는 차이점이 있다.
  • compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성
  • 같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+)

Comparator와 Comparable 예제

  • 대문자와 소문자를 정렬하면, 대문자가 배열의 앞에 나오게 된다.
  • String.CASE_INSENSITIVE_ORDER 는
public static final Comparator<String> CASE_INSENSITIBE_ORDER = new CaseInsensitiveComparator();
// staic final = static 상수
// CaseInsensitiveComparator() = 내부 클래스(Comparator 인터페이스 구현)
  • 정렬을 위해서는 1.대상 / 2.기준이 필요하다.
static void sort(Object[] a) // 객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
staitc void sort(Object[] a, Comperator c) // 지정한 Comparator에 의한 정렬
// Object[] a는 대상, Comperator c는 기준
// 첫 번째는 정렬 기준이 없지만 Comparable가 대신 기준이 된다.

Integer와 Comparable

  • Integer 클래스는 Coparable을 상속 받는다.
  • Comparable는 기본 정렬 기준을 제공한다. (정렬기준이 없을 때 사용)
  • 그냥 뺄셈을 하면 되는데, 성능 때문에 삼항 연산자를 사용한다.
  • 정렬 = 두 대상을 비교해서 자리바꿈을 반복하는 것으로 불변하는 정렬방법을 놔두고 가변적인 정렬기준을 변경한다.
  • 버블정렬코드

ch 11-34~36 HashSet(1/2)

HasSet - 순서X, 중복 X

  • Set 인터페이스를 구현한 대표적인 클래스는 HashSet과 TreeSet이 있다.
  • HashSet
  • Set인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지하려면, LinkedHashSet클래스를 사용하면 된다.
  • TreeSet
  • 범위 검색과 정렬에 유리한 컬렉션 클래스
  • HashSet보다 데이터 추가, 삭제에 시간이 더 걸림

HashSet의 주요 메서드

HashSet()
HashSet(Collection c)  // 생성자
HashSet(int initialCapacity) // 초기용량
HashSet(int initialCapacity, float loadFacotor)
boolean add(Object o)
boolean addAll(Collection c) // 추가(합집합)
boolean remove(Object o)
boolean removeAll(Collection c) // 삭제(교집합)
boolean retainAll(Collection c) // 조건부삭제(차집합)
voic clear()  // 모두 삭제
boolean contains(Object o) // 객체를 포함하는지
boolean containsAll(Collection c) // 여러 객체를 모두 포함하는지
boolean isEmpty() // 비어있는지
int size() // 저장된 객체의 수
Object[]toArray()
Object[]toArray(Object[]a) // 객체배열로 반환
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글