[자료구조] 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



댓글남기기