[자료구조] Java HashSet 사용법 및 총정리
업데이트:
✅ HashSet이란 ?
HashSet은 Set 인터페이스를 구현한 대표적인 Set 컬렉션이다. Set 인터페이스를 상속하고 있기 때문에 Set의 성질을 그대로 사용할 수 있다. java.util.HashSet
클래스를 통해 제공된다. HashSet은 내부적으로 HashMap을 사용하여 요소들을 저장하기 때문에 같은 요소의 중복 저장을 허용하지 않는다. 또한 해시함수를 사용해 값을 저장하므로 저장순서를 유지하지 않는다.
✅ HashSet 사용법
📌 HashSet 선언
HashSet<Integer> set1 = new HashSet<Integer>(); // HashSet 생성
HashSet<Integer> set2 = new HaseSet<>(); // 타입 파라미터 생략 가능
HashSet<Integer> set3 = new HashSet<Integer>(set1); // set1의 모든 값을 가진 HashsSet 생성
HashSet<Integer> set4 = new HashSet<Integer>(10); // 초기 용량 지정
HashSet은 기본적으로 initial capacity(16), load factor(0.75)의 값을 가진 객체를 생성한다. HashSet은 저장공간보다 값이 추가로 들어오는 경우, List처럼 저장공간을 늘리는데 저장 공간을 약 두배정도로 늘려버린다. 여기서 과부하가 많이 발생하기 때문에, 초기 저장할 데이터 갯수를 알고 있다면 Set의 초기 용량을 설정해주는 것이 좋다.
📌 HashSet 값 추가
HashSet<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
HashSet에 값을 추가할 때는 add(value)
메소드를 사용할 수 있다. 이때 HashSet은 중복값을 허용하지 않기 때문에 기존에 존재하는 값을 또 추가한다 해도 하나의 값만 유지된다.
📌 HashSet 값 삭제
HashSet<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1); // 값 1 제거
set.clear(); // 모든 값 제거
HashSet의 값을 제거하려면 remove(value)
메소드를 사용하면 된다. clear()
메소드는 HashSet의 모든 값을 제거하고 메모리 누수를 최소화 하기 위해 HashSet 사용 완료후 반드시 추가해주는 습관을 들이는 것이 좋다.
📌 HashSet 값 출력
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set); // [1,2,3]
Iterator iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
HashSet을 그냥 출력하면 대괄호에 묶여 출력된다. HashSet의 각 요소를 출력하기 위해서는 다른방식을 써야하는데, HashSet에는 get()
메서드가 없다. 그래서 반복자(Iterator)를 이용해 각 요소를 출력한다.
📌 HashSet 값 검색
HashSet<Integer> set = new HashSet<>();
set.put(1);
set.put(2);
set.put(3);
System.out.println(set.contains(1)); // true
System.out.println(set.contains(5)); // false
댓글남기기