-
SetJava/Data-Structure 2019. 8. 1. 21:37
■Set 인터페이스
- 중복을 허용하지 않음
- 구현 클래스 : HashSet, TreeSet, LinkedHashSet
- 동기화를 지원하지 않는다.(Not Thread Safe)
■HashSet 클래스
- 내부 구현 : HashMap
- 순서 없이 데이터 저장
- HashSet.add 과정
HashMap.put(data,new Objtect)
- HashSet.remove 과정
HashMap.remove(data)
- 데이터를 HashMap의 key를 이용해 저장하기 때문에 검색 속도가 빠르다
- 제네릭을 이용하여 HashSet을 사용할 경우, HashMap의 key 중복 검사에 해당 제네릭
클래스의 hashCode()와 equals()가 사용됨. 따라서 각 메소드들을 적절하게 재정의하는
것이 좋다.
- 동기화를 지원하지 않기 때문에 때에 따라
명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)
■TreeSet 클래스
- 내부 구현 : NavigableMap
(BinarySearchTree에서 성능이 향상된 RedBlackTree의 형태)
- 오름차순하여 데이터 저장
(descendingSet() 메소드를 사용해 내림차순하여 사용할 수도 있음)
- TreeSet.add 과정
NavigableMap.put(data,new Objtect)
- TreeSet.remove 과정
NavigableMap.put(data)
- 데이터 추가, 삭제에는 시간이 좀 걸리지만 검색하는 시간이 적게들고
정렬된 Set을 이용할 수 있다. (HashSet보다는 검색 시간이 느림) (?)
- 동기화를 지원하지 않기 때문에 때에 따라
명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)
■LinkedHashSet(extends HashSet) 클래스
- 내부 구현 : LinkedHashMap
(HashSet의 생성자 중 LinkedHashMap을 생성하는 생성자만을 사용)
- 입력된 순서대로 정렬
- LinkedHashSet.add 과정
LinkedHashMap.put()
- LinkedHashSet.remove 과정
LinkedHashMap.remove()
- 데이터를 Linked 형식으로 저장하기 때문에 HashSet보다 성능이 약간 후지다고 함
(?확인필요?)
- 동기화를 지원하지 않기 때문에 때에 따라
명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)
'Java > Data-Structure' 카테고리의 다른 글
List (0) 2019.08.01 댓글