산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java HashSet 클래스 완벽 가이드: 연산, 메서드, 집합론

Java HashSet 클래스

Java HashSet 클래스 – 생성, 핵심 메서드, 실전 집합 연산 – 을 간결한 예제로 탐구합니다.

HashSet 클래스는 Java 컬렉션 프레임워크의 일부로 Set 인터페이스를 구현하며 해시 테이블 기반 저장소를 제공합니다.


HashSet 생성하기

java.util.HashSet 임포트:

import java.util.HashSet;

특정 용량과 부하 계수로 HashSet 생성:

HashSet<Integer> numbers = new HashSet<>(8, 0.75); // capacity=8, loadFactor=0.75

매개변수:

기본값 사용도 일반적:

HashSet<Integer> numbers1 = new HashSet<>(); // capacity=16, loadFactor=0.75

HashSet 메서드

가장 자주 쓰이는 메서드:


요소 삽입

add와 addAll 사용 예제:

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumber = new HashSet<>();
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("HashSet: " + evenNumber);
        HashSet<Integer> numbers = new HashSet<>();
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New HashSet: " + numbers);
    }
}

출력

HashSet: [2, 4, 6] New HashSet: [2, 4, 5, 6]

요소 접근

Iterator로 순회:

import java.util.HashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: " + numbers);
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("HashSet using Iterator: ");
        while(iterate.hasNext()) {
            System.out.print(iterate.next() + ", ");
        }
    }
}

출력

HashSet: [2, 5, 6] HashSet using Iterator: 2, 5, 6,

요소 제거

단일 제거와 집합 비우기:

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: " + numbers);
        boolean removed = numbers.remove(5);
        System.out.println("Is 5 removed? " + removed);
        boolean cleared = numbers.removeAll(numbers);
        System.out.println("Are all elements removed? " + cleared);
    }
}

출력

HashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true

집합 연산

HashSet의 대량 메서드는 고전적 집합론 연산을 지원합니다.

합집합(Union)

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(3);
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);
    }
}

출력

Union is: [1, 2, 3, 4]

교집합(Intersection)

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        evenNumbers.retainAll(primeNumbers);
        System.out.println("Intersection is: " + evenNumbers);
    }
}

출력

Intersection is: [2]

차집합(Difference)

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        HashSet<Integer> oddNumbers = new HashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        primeNumbers.removeAll(oddNumbers);
        System.out.println("Difference: " + primeNumbers);
    }
}

출력

Difference: [2]

부분집합 확인

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        boolean isSubset = numbers.containsAll(primeNumbers);
        System.out.println("Is primeNumbers a subset of numbers? " + isSubset);
    }
}

출력

Is primeNumbers a subset of numbers? true

추가 메서드

메서드설명
clone()집합의 얕은 복사본 생성
contains()요소 존재 여부 확인
isEmpty()집합이 비어있으면 true 반환
size()집합의 요소 수
clear()모든 요소 제거

전체 목록은 공식 Java 문서를 참조하세요.


왜 HashSet을 사용하는가?

임의 접근이 필요할 때 HashSet은 해시 테이블 백킹 덕분에 O(1) 성능을 제공합니다. 각 요소의 hashCode()가 고유성을 보장하여 중복을 방지합니다. 하지만 HashSet은 스레드 안전하지 않으며 동시 사용 시 외부 동기화가 필요합니다.

참고: HashSet은 비동기화이므로 여러 스레드가 동시에 수정하면 데이터 구조가 손상될 수 있습니다.

java

  1. Java final 키워드 마스터: 변수, 메서드, 클래스에서의 활용
  2. Java instanceof 연산자 완벽 가이드: 기본 사용법부터 상속, 인터페이스까지
  3. Java 정적 중첩 클래스 이해: 용법, 내부 클래스와의 차이, 예제
  4. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  5. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  6. Java 리플렉션 마스터: 런타임에 클래스, 메서드, 필드 검사 및 조작
  7. Java 컬렉션 알고리즘 마스터하기: 정렬, 셔플링 등
  8. Java ObjectOutputStream 마스터하기: 직렬화, 메서드, 실전 예제
  9. Java 제네릭 마스터하기: 재사용 가능하고 타입 안전한 코드 작성
  10. java.io로 Java 파일 작업 마스터하기 – 생성, 읽기, 쓰기 및 삭제