끵뀐꿩긘의 여러가지

Java - HashSet 클래스 본문

JAVA/자료구조-알고리즘&함수 정리

Java - HashSet 클래스

끵뀐꿩긘 2021. 4. 27. 16:30

Set이란?

우리에게 익숙한 List처럼 데이터를 저장하는 자료형 중 하나이다.

 

set의 특징:

- 요소의 저장 순서를 유지하지 않는다

- 같은 요소의 중복 저장을 허용하지 않는다

 

set을 구현한 클래스:

HashSet: 데이터를 해쉬 테이블에 담는 클래스, 순서가 정해지지 않는다.

TreeSet: red-black이라는 트리에 데이터가 담아지며, 값에 따라서 순서가 정해진다. HashSet보다 성능상 느리다.

LinkedHashSet: 해쉬 테이블에 데이터를 담는데, 저장된 순서에 따라서 순서가 결정된다.

 

※Hash 테이블과 red-black트리는 나중에 포스팅하면, 링크를 첨부하겠습니다.

 


<Hashset의 특징 및 메서드>

HashSet 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.

HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다.

HashSet 클래스는 중복요소를 알아서 제거해준다.

 

선언:

import java.util.HashSet;

HashSet<Integer> set = new HashSet<>();

 

메서드:

생성자 or 메서드 사용법
HashSet()  HashSet 객체를 생성
HashSet(Collection c) 주어진 컬렉션을 포함하는  HashSet 객체 생성
HashSet(int initialCapacity) 주어진 값을 초기용량으로 하는  HashSet 객체를 생성
HashSet(int initialCapacity, float loadFactor) 초기용량( initialCapacity )과 load factor( loadFactor )를 지정하는 생성자
load factor는 컬렉션 클래스에 저장공간이 가득 차기전에 미리 용량을 확보하기 위한 것으로 이 값을 0.8로 지정하면, 저장공간의 80%가 채워졌을때 저장공간이 두배로 늘어난다. default는 0.75
boolean add(Object o) 새로운 객체를 저장
boolean addAll(Collection c) 주어진 컬렉션에 저장된 모든 객체들을 추가
void clear() 저장된 모든 객체를 삭제
Object clone() HashSet 을 복제해서 반환(얕은 복사)
boolean contains(Object o) 지정된 객체를 포함하고 있는지 알려줌
boolean conainsAll(Collection c) 주어진 컬렉션에 저장된 모든 객체들을 포함하고 있는지 알려줌
boolean isEmpty()  HashSet 이 비어있는지 알려줌
Iterator iterator() Iterator 를 반환
boolean remove(Object o) 지정된 객체를  HashSet 에서 삭제
성공하면 true, 실패하면 false
boolean removeAll(Collecton c) 주어진 컬렉션에 저장된 모든 객체와 동일한
것들을 
 Hashset 에서 모두 삭제
boolean retainAll(Collection c) 주어진 컬렉션에 저장된 객체와 동일한 것만 남기고 삭제
int size() 저장된 객체의 개수를 반환
Object[] toArray() 저장된 객체들을 객체배열의 형태로 반환
Object[] toArray(Object[] a) 저장된 객체들을 주어진 객체배열( a )에 담는다.

-Iterator를 통한 HashSet 사용 & HashSet의 중복 제거

import java.util.*;

public class Main {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();
        set.add(1); //1추가
        set.add(1); //1추가(중복)
        set.add(1); //1추가(중복)
        set.add(2); //2추가
        set.add(3); //3추가
        Iterator<Integer> iter = set.iterator();	// Iterator 사용
        while(iter.hasNext()) {//값이 있으면 true 없으면 false
            System.out.println(iter.next()); //다음 값 return
        }
    }
}

출력결과:

1
2
3

 

HashSet에 중복된 데이터를 넣으면 1개로만 처리된다.

HashSet의 값은 Iterator를 통해 꺼낼 수 있다.

Comments