JAVA/자바의 정석

[자바의 정석 - 기초편] 11. (5) HashSet / TreeSet

서영22 2023. 12. 12. 16:46

 HashSet - 순서 X, 중복 X 

HashSet

 

- Set 인터페이스를 구현한 대표적인 컬렉션 클래스

 

- 순서를 유지하려면 LinkedHashSet 클래스 사용하면 됨

 

- 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인

   같은 객체가 없으면 저장하고, 있으면 저장하지 않음

 

- boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출

   equals()와 hashCode()가 오버라이딩 되어 있어야 함

 

 

 

 

HashSet 주요 메서드

 

 

 

< 예제 1 >

 

 

 

 

< 예제 2 >

 

 

Set은 정렬 불가능 ➔ Set의 모든 요소를 List에 저장 ➔ List를 정렬 후 출력

 

 

 

< 예제 3 >

 

 

 

 

< 예제 4 >

 

 

 

 

 TreeSet - 범위 탐색, 정렬 

TreeSet

 

- 이진 탐색 트리로 구현. 범위 검색과 정렬에 유리한 컬렉션 클래스

 

- HashSet보다 데이터 추가, 삭제에 시간이 더 걸림

 

- 이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖음

   각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)

 

 

 

 

 이진 탐색 트리 (binary search tree) 

- 부모보다 작은 값 : 왼쪽  /  큰 값 : 오른쪽

 

- 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림 (비교 횟수 증가해서)

 

 

 

TreeSet 저장 과정 boolean add(Object o)

 

 

 

TreeSet 주요 생성자와 메서드

 

 

 

TreeSet 범위 검색 ( subSet(), headSet(), tailSet() )

 

 

 

 

< 예제 1 >

TreeSet을 사용하려면! (비교기준이 필요함)

➔ 다음 두가지중 하나 꼭 필요!

 

1. 저장하는 객체가 Comparable 갖기

 

 

 

2. TreeSet()이 저장하는 정렬기준을 갖기 (Comparator)

 

 

< 예제 1 >

 

 

 

 

< 예제 2 >

 

 

 

 

 트리 순회 (tree traversal) 

이진 트리의 모든 노드를 한번씩 읽는 것

 

- 전위, 중위, 후위 순회법이 있으며, 중위 순회하면 오름차순으로 정렬됨