HashSet은 Java 컬렉션 프레임워크에서 제공하는 자료구조 중 하나로, 중복되지 않은 요소들을 저장하고 관리하는 집합(Set) 구현체이다. HashSet은 해시 함수를 사용하여 요소들을 저장하므로 빠른 검색 속도를 제공하며, 순서를 보장하지 않는다.
HashSet의 주요 특징과 사용 방법
중복 제거 : HashSet은 중복되지 않은 요소들만 저장한다. 이미 존재하는 요소를 추가하려고 하면 추가되지 않는다.
빠른 검색 : 해시 함수를 사용하여 요소들을 저장하므로 빠른 검색 속도를 제공한다. 평균적으로 상수 시간( O(1) )에 요소를 검색할 수 있다.
Null 허용
순서 보장하지 않음 : HashSet은 요소들의 순서를 보장하지 않는다. 순서가 중요한 경우에는 LinkedHashSet을 사용
// HashSet 생성
HashSet<String> hashSet = new HashSet<>();
// 요소 추가
hashSet.add("apple");
hashSet.add("banana");
hashSet.add("apple"); // 중복된 요소는 추가되지 않음
//성공적으로 추가되면 true 실패하면 false 반환
// 요소 개수 확인
int size = hashSet.size();
System.out.println("HashSet size: " + size); //2
// 요소 존재 여부 확인
boolean containsBanana = hashSet.contains("banana");//true
// 요소 삭제
hashSet.remove("orange");
// 모든 요소 순회
for (String element : hashSet) {
System.out.println("Element: " + element);
}
// Iterator를 사용하여 요소 순회
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
}
HashSet 출력하기(for-each, Iterator 외)
HashSet<String> hashSet = new HashSet<>();
// HashSet에 요소들 추가
hashSet.forEach(item -> System.out.println(item));
HashSet<String> hashSet = new HashSet<>();
// HashSet에 요소들 추가
Object[] array = hashSet.toArray();
for (Object item : array) {
System.out.println(item);
}
*참고 HashSet의 중복 제거를 위해서는 hashCode()와 equals()를 모두 오버라이딩해야 한다.
HashSet은 이 두 개를 모두 비교하여 서로 같은 객체인지 판별하기 때문
import java.util.HashSet;
class Member {
private int id;
private String name;
private String password;
public Member(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Member other = (Member) obj;
return id == other.id &&
(name != null ? name.equals(other.name) : other.name == null) &&
(password != null ? password.equals(other.password) : other.password == null);
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
return result;
}
}
public class FirstApp {
public static void main(String[] args) {
HashSet<Member> members = new HashSet<>();
Member member1 = new Member(1, "User1", "password1");
Member member2 = new Member(1, "User1", "password1");
members.add(member1);
members.add(member2);//false
members.size();//1
}
}
출처 openAI