[개인공부] HashSet

Walter Mitty·2022년 12월 28일
0

개인공부

목록 보기
36/40

HashSet

특징

  • Set 인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서 X, 중복X 지만!
  • 순서를 유지하려면, LinkedHashSet 클래스를 사용하면 된다.

TreeSet

  • 범위 검색과 정렬에 유리한 컬렉션 클래스

    • 예) from 10 to 20
  • HashSet보다 데이터 추가, 삭제에 시간이 더 걸린다.

    HashSet 주요 메서드

  • 생성자는 지정된 컬렉션의 모든 객체를 저장한다

  • 초기용량은 컬렉션 클래스들은 스스로 공간을 늘리는데 처음 용량을 얼마로 할지

  • 로드팩터는 용량을 뭐…2배로 할건데 언제 할건지? 0.8이면 80% 찼을 때 2배로 늘림

  • retainAll()은 조건부 삭제로 차집합구할 때 쓴다

  • addAll() 은 합집합

  • removeAll() 은 교집합

예제)

하나는 문자열 객체, 하나는 인티저객체여서 중복이라고 보지않는다.

예제2)
Set은 정렬 불가! 왜냐하면 정렬이라는 말이 순서를 유지한다는 말이니까. 그래서 LinkedList로 만들거나 ArrayList로 만들어서 sort한다.

예제3)

  • HashSet은 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인한다.
    • 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
    • List는 중복을 허용하니까 검사할 필요가 없다.
  • boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출한다
    • equals()와 hashCode()가 오버라이딩 되어있어야 함

예제)
오버라이딩을 해줘야 HashSet이 올바르게 동작한다.

예제)

더쉽게하는 방법
교집합: setA.retainAll(setB); 공통된 요소만 남기고 삭제
합집합: setA.addAll(setB); setB의 모든 요소를 추가(중복 제외)
차집합: setA.removeAll(setB); setB와 공통 요소를 제거

0개의 댓글