java/ㄴ CHAPTER 11. 컬렉션 프레임워크

CHAPTER 11. (6) HashSet이란? (TreeSet, HashMap 포함)

Astaroth아스 2020. 4. 23. 14:59

HashSet
 - Set 인터페이스를 구현한 가장 대표적인 컬렉션
 - 중복 요소 저장 X
 - 요소 추가 시 add(), addAll() 메서드 사용 
 - 이미 저장된 요소를 중복 추가시 false 반환 (추가 실패) => 중복 요소 쉽게 제거
 - 저장 순서 유지 X (순서 유지 원할시 LinkedHashSet 사용)

메서드
 - boolean add(Object o) : 새로운 객체 저장 (성공시 true, 실패시 false)
 - void clear() : 주어진 모든 객체 삭제
 - boolean isEmpty() : HashSet이 비어있는지 확인
 - Iterator iterator() : Iterator 반환
 - boolean remove(Object o) : 지정된 객체 HashSet에서 삭제 (성공시 true, 실패시 false)
 - int size() : 저장된 객체 개수 반환



TreeSet
 - 이진 검색 트리 탐색으로 데이터를 저장하는 컬렉션 클래스
 - 기존 이진보다 성능 향상된 레드-블랙 트리로 구현됨
 - 중복 데이터 저장 허용 X
 - 저장 순서 유지 X (데이터 정렬시켜서 저장하므로)



이진 검색 트리
 - 여러 노드가 서로 연결된 자료 구조
 - 루트root 라는 하나의 노드에서 시작, 확장
 - 각 노드에 최대 2개 노드 연결 가능
 - 위, 아래로 연결된 두 노드 (부모-자식 관계)

사용법
 - 부모노드 왼쪽에 부모노드 값보다 작은 값, 부모노드 오른쪽에 부모노드 값보다 큰 값 저장

장점
 - 정렬된 상태 유지
 - 단일 값 검색, 범위 검색이 매우 빠름 (검색 효율 뛰어남) 
 => 정렬, 검색, 범위검색 성능 좋음 (LinkedList나 Array 보다) 

단점
 - 순차적 저장 X (각 저장위치 찾아서 저장)
 - 추가/삭제 경우 트리 일부분 재구성 필요 (LinkedList보다 추가/삭제 시간 더 걸림)
 - TreeSet에 저장되는 객체가 Comparable 구현 or Comparator 제공, 두 객체 비교 방법 정의



HashMap
 - HashTable 상위 버전
 - 해싱 사용 (다량의 데이터 검색 뛰어남)
 - Entry라는 내부 클래스 정의
  ㄴ 키와 값을 묶어서 저장 (key, value = Entry)
  ㄴ왜 묶어서 저장? 별개의 값이 아니라 서로 연관된 값이기 때문 
  => 하나의 배열로 다루는 것이 데이터 무결성 측면에서 더 바람직

 - 키와 값을 각각 Object 타입으로 저장
  = 어떤 객체도 저장 가능하지만, 키는 주로 String

키 : 컬렉션 내의 키 중에서 유일한 값 (하나의 키로 검색시 결과는 단 하나)
값 : 데이터 중복 허용

 - 만약 중복키 있을 시, 새로운 값으로 덮어씀

ex.
map.put("asdf", "1111");
map.put("asdf", "1234");
// asdf의 값은 1234

 


사용처
 - 한정되지 않은 범위의 비순차적인 값들의 빈도 계산 등...

메서드
 - boolean containKey (Object key) : 지정된 키가 포함되어있는지 확인 (true/false)
 - Object put(Object key, Object value) : 지정된 키와 값을 HashMap에 저장