Java Collection - Set

지노·2021년 11월 18일
0

Set

Set은 List와 다르게 데이터를 중복해서 저장할 수 없다.
저장된 객체를 인덱스로 관리하지 않기 때문에 저장 순서가 보장되지 않는다.
Set을 구현하는 대표적인 클래스는 HashSet, TreeSet, LinkedHashSet이 있다.

HashSet

데이터를 중복 저장할 수 없고 순서를 보장하지 않는다.

구현

내부적으로 HashMap을 갖고 있다.
데이터는 HashMap의 key로 저장한다.
HashMap의 value에 더미 객체를 넣는다.

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

TreeSet

TreeSet은 중복된 데이터를 저장할 수 없고 입력한 순서대로 값을 저장하지 않는다.
대신 TreeSet은 기본적으로 오름차순으로 데이터를 정렬한다.

구현

내부적으로 TreeMap을 갖고 있다.
데이터는 TreeMap을 key로 저장한다.
TreeMap을 value에 더미 객체를 넣는다.

public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable
{
    /**
     * The backing map.
     */
    private transient NavigableMap<E,Object> m;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

LinkedHashSet

HashSet을 상속하며, HashSet 생성자 중 Map을 LinkedHashMap으로 정의하는 생성자를 사용한다.
HashSet과의 차이점은 내부 Map을 HashMap으로 선언했는지, LinkedHashMap으로 선언했는지의 차이다.
데이터는 LinkedHashMap으로 key로 저장한다.
LinkedHashMap value로는 더미 객체를 넣는다.

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }
public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {

    private static final long serialVersionUID = -2851667679971038690L;
profile
Spring Framework를 이용한 웹 개발과 AWS 서비스, Container를 사용한 CI/CD 인프라에 관심이 있습니다.

0개의 댓글