1. HashSet 클래스
HashSet 클래스는 집합 자료 구조를 구현하며 중복을 허용하지 않는다.
1) 중복을 허용하지 않는다.
2) 순서가 없다.
1. HashSet을 활용해 회원 관리 프로그램 구현하기
- addMember(): HashSet에 회원 추가
- removeMember(): 매개변수로 받은 id에 해당하는 회원을 HashSet에서 삭제
- showAllMember(): HashSet의 모든 회원 출력
(주의) ArrayList에서는 ArrayList.get(i)를 이용해 i번째에 해당하는 항목을 삭제했지만,
HashSet은 순서가 없으므로 해당 아이디를 가진 회원을 찾기위해 Iterator를 사용한다.
<HashSet 주요 메서드>
boolean add(E o) | 매개변수로 받은 객체가 HashSet에 없으면 객체 추가 |
boolean remove(Object o) | HashSet에 매개변수로 받은 객체 삭제 |
2. 객체가 동일함을 구현하기
기본적으로 인스턴스 주소가 같으면 같은 객체이다.
하지만 여기서는 회원 아이디가 같으면 같은 회원이므로 논리적으로 같은 객체임을 구현하기 위해 equals()와 hashCode() 메서드를 재정의해야한다.
2. TreeSet 클래스
TreeSet은 자료의 중복을 허용하지 않으면서 출력 결과 값을 정렬하는 클래스다.
자바는 정렬을 구현하기 위해 이진 트리를 사용한다.
1. 이진 검색 트리
<이진 탐색 트리(BinarySearchTree) 특징>
1) 노드에 저장되는 자료의 중복을 허용하지 않는다.
2) 부모가 가지는 자식 노드의 수가 2개 이하다.
3) 왼쪽 자식 노드는 부모 노드보다 항상 작은 값, 오른쪽 자식 노드는 부모 노드보다 항상 큰 값을 가진다.
4) 비교 범위가 평균 1/2씩 줄어들어 효과적으로 자료 검색O
2. TreeSet을 활용해 회원 관리 프로그램 구현하기
- addMember(): TreeSet에 회원 추가
- removeMember(): 매개변수로 받은 id에 해당하는 회원을 TreeSet에서 삭제
- showAllMember(): TreeSet의 모든 회원 출력
<TreeSet 주요 메서드>
boolean add(E o) | 매개변수로 받은 객체가 TreeSet에 없으면 객체 추가 |
boolean remove(Object o) | TreeSet에 매개변수로 받은 객체 삭제 |
(주의) 객체 간 정렬을 하기 위해 Comparable 인터페이스를 구현해야한다.
우리가 만든 Member 클래스를 TreeSet의 요소로 추가할 때 어떤 기준으로 객체 간 비교를 할 것인지 정해야한다. 이진 탐색 트리를 만들기 위해서 객체 간 비교를 해야하는데 현재로선 Member 객체를 어떤 값으로 비교를 할 것인지 알 수 없다.
3. Comparable 인터페이스와 Comparator 인터페이스
Comparable과 Comparator는 객체 간 비교를 가능하게 하여 정렬을 구현할 수 있게 해주는 인터페이스다.
일반적으로 Comparable 인터페이스를 더 많이 사용한다.
1. 자기 자신과 전달받은 매개변수를 비교하는 Comaprable 인터페이스
정렬기준 값이 있는 클래스에 Comparable 인터페이스를 구현하면된다.
public class Member implements Comparable<Member> {
...
}
Comparable 인터페이스에 있는 comparableTo() 추상 메서드를 구현해야한다.
compareTo() 는 TreeSet에 요소를 추가할 때 호출되는 메서드다.
새로 추가할 값은 this, 비교되는 값은 매개변수로 전달된다.
ComparableTo()의 반환 값은 정수값으로 비교하는 두 값 중 this 값이 더 크면 양수를 반환하여 오름차순 정렬되고, this 값이 작으면 음수를 반환하여 내림차순 정렬된다.
2. 두 매개변수를 비교하는 Comparator 인터페이스
Comparator 인터페이스는 정렬을 구현하는데 사용하는 인터페이스로 compare() 메서드를 구현해야한다.
compare() 메서드는 전달되는 두 매개변수를 비교하고 첫번째 매개변수가 더 클 때 양수를 반환하여 오름차순 정렬한다.
(주의) TreeSet 생성자에 Comparator를 구현한 객체를 매개변수로 전달해야한다.
TreeSet<Member> treeSet = new TrreSet<Member>(new Member());
'Java > Do It! 자바 프로그래밍' 카테고리의 다른 글
[JAVA] 13-1. 내부 클래스 (0) | 2022.05.10 |
---|---|
[JAVA] 12-5.컬렉션 프레임워크_Map 인터페이스 (0) | 2022.05.09 |
[JAVA] 12-3.컬렉션 프레임워크_List 인터페이스 (0) | 2022.05.09 |
[JAVA] 12-2.컬렌션 프레임워크_컬렉션 프레임워크 (0) | 2022.05.09 |
[JAVA] 12-1.컬렉션 프레임워크_제네릭 (0) | 2022.05.09 |