HashSet, TreeSet 클래스

지윤·2021년 2월 12일
0

Java

목록 보기
15/21

HashSet

  • 순서X, 중복X
  • Set 인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지하려면, LinkedHashSet 클래스를 사용하면 된다.
  • List에 담아서 정렬할 수 있다.
Set set = new HashSet();

set.add(5);
set.add(90);
set.add(2);
set.add(50);
//set은 정렬 X -> Set의 요소를 list에 저장
List list = new LinkedList(set); 
Collections.sort(list);
  • 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인하고 없으면 저장하고 있으면 저장하지 않는다. 이때 boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출한다. 따라서 equals()와 hashCode()가 오버라이딩 되어 있어야 같은 객체인지 비교 가능하다.
public boolean equals(Object obj){
	//인스턴스 변수가 같은지 비교
}
public int hashCode(){
	return Objects.hash(변수명, 변수명,,,,);
}
  • 차집합, 교집합, 합집합 구하기(retainAll(), addAll(), removeAll())

TreeSet

  • 이진 탐색 트리(binary search tree)로 구현 -> 범위 탐색과 정렬에 유리(장점)
  • 요소 추가 및 삭제 시 시간 증가 (단점)
  • 정렬을 따로 할 필요 없음
  • 이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖음(LinkedList의 변형)
class TreeNode{
    TreeNode left; //왼쪽 자식
    TreeNode right; //저장할 객체
    Object element; //오른쪽 자식
}
  • add() 시 비교 기준이 없으면 예외 발생하므로 아래 두가지 방법 중 하나를 사용하여 처리
    1. Comparator 인터페이스의 compare 메서드를 오버라이드 한 클래스를 비교 기준으로 TreeSet 객체 생성시 파라미터로 전달 (new TreeSet(비교기준))
    2. 추가할 데이터 객체가 Comparable 인터페이스의 compareTo 메서드를 오버라이딩 해야 한다.
  • 유용한 메서드가 많이 있다. 범위 검색에 유리한 메서드 subSet(), headSet(), tailSet() 제공한다.

이진 탐색 트리(binary search tree)

  • 부모보다 작은 값은 왼쪽, 큰 값은 오른쪽에 저장
  • 이진 트리의 한 종류이다.
  • 데이터가 많아질 수록 추가, 삭제에 시간이 증가함(요소를 저장할 때 마다 비교 횟수가 점점 증가)
profile
헬로🙋‍♀️

0개의 댓글