HashSet

개굴이·2023년 9월 4일
0

Java

목록 보기
4/7
post-thumbnail

HashSet

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

0개의 댓글