본문 바로가기
DEV/Java

[자바] HashSet

by 어쩌다개발 2023. 2. 15.
반응형

HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, 중복된 요소를 저장하지 않는다.

만약 이미 저장되어 있는 요소와 중복된 요소를 추가하고자 한다면 add나 addAll 메서드들은 false를 반환함으로써 중복된 요소이기 때문에 추가에 실패했다는것을 알린다.

HashSet의 특징을 이용하면, 컬렉션 내의 중복 요소들을 쉽게 제거할 수 있다.

ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않고 저장순서를 유지하려면 LinkedHashSet을 사용하면 된다.

HashSet은 내부적으로 HashMap을 이용해서 만들어졌으며, HashSet이란 이름은 해싱(hashing)을 이용해서 구현했기 때문에 붙여진 것이다. 

생성자 또는 메서드 설명
HashSet() HashSet 객체를 생성.
HashSet(Collection c) 주어진 컬렉션을 포함하는 HashSet 객체를 생성.
HashSet(int initialCapacity) 주어진 값을 초기용량으로하는 HashSet 객체를 생성.
HashSet(int initialCapacity, float loadFactor) 초기용량과 load factor를 지정하는 생성자.
boolean add(Object o) 새로운 객체를 저장
boolean addAll(Collection c) 주어진 컬렉션에 저장된 모든 객체들을 추가(합집합)
void clear() 저장된 모든 객체를 삭제
Object clone() HashSet을 복제해서 반환(얕은 복사)
boolean contains(Object o) 지정된 객체를 포함하고 있는지 알려준다.
boolean containsAll(Collection c) 주어진 컬렉션에 저장된 모든 객체들을 포함하고 있는지 알려준다.
boolean isEmpty() HashSet이 비어있는지 알려준다.
Iterator iterator() Iterator를 반환
boolean remove(Object o) 지정된 객체를 HashSet에서 삭제(성공하면 true, 실패하면 false)
boolean removeAll(Collection c) 주어진 컬렉션에 저장된 모든 객체와 동일한 것들을 HashSet에서 모두 삭제(차집합)
boolean retainAll(Collection c) 주어진 컬렉션에 저장된 객체와 동일한 것만 남기고 삭제(교집합)
int size() 저장된 객체의 수를 반환.
Object[] toArray() 저장된 객체들을 객체배열의 형태로 반환
Object[] toArray(Object[] a) 저장된 객체들을 주어진 객체비열(a)에 담는다.
import java.util.HashSet;
import java.util.Set;

public class HashSetEx1 {
    public static void main(String[] args) {
        Object[] objArr = {"1", 1, "2", "2", "3", "3", "4", "4", "4"};
        Set set = new HashSet();

        for (int i = 0; i < objArr.length; i++) {
            set.add(objArr[i]);
        }

        //중복된값은 저장되지 않는걸 확인할 수 있다.
        //String과 int는 구분된다.
        //순서는 다르게 표시될 수 있다.
        System.out.println(set);
    }
}

실행결과

[1, 1, 2, 3, 4]

 

 

import java.util.*;

public class HashSetLotto {
    public static void main(String[] args) {
        Set set = new HashSet();

        for (int i = 0; set.size() < 6; i++) {
            int num = (int)(Math.random() * 45) + 1;
            set.add(num);
        }

        List list = new LinkedList(set);
        Collections.sort(list);
        System.out.println(list);
    }
}

실행결과

[4, 6, 24, 25, 29, 31]

 

 

참고: 자바의정석

반응형

'DEV > Java' 카테고리의 다른 글

[자바] Properties  (8) 2023.02.16
[자바] HashMap  (3) 2023.02.15
[자바] Comparator 와 Comparable  (3) 2023.02.14
[자바] Arrays  (7) 2023.02.14
[자바] Stack(스택)과 Queue(큐)  (3) 2023.02.12

댓글