[Java] Set

1 분 소요

Set

Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다. Set 인터페이스를 구현한 클래스로는 HashSet, TreeSet 등이 있다.

Array → Set 변환

int[] arr = {1, 2, 3, 4, 5};
Set<Integer> set = new HashSet<>();

set = Arrays.stream(arr).boxed().collect(Collectors.toSet());

System.out.println(set); // [1, 2, 3, 4, 5]

Set → Array 변환

Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Object[] array = set.toArray();

for(Object obj : array)
    System.out.print(obj + " "); // 1 2 3 4 5


HashSet

HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이다. Set 인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. 또한 저장 순서를 유지하지 않으므로, 저장순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다.

Object[] objArr = {"1", new Integer(1), "2", "2", "3", "3", "4", "4", "4"};

Set set = new HashSet();

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

System.out.println(set); // [1, 1, 2, 3, 4]


TreeSet

TreeSet은 이진 검색 트리의 형태로 데이터를 저장하는 컬렉션 클래스이다. 이진 검색 트리는 정렬, 검색, 범위검색에 높은 성능을 보이는 자료구조이며, TreeSet은 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리 로 구현되어 있다.

TreeSet은 HashSet과 마찬가지로 Set 인터페이스를 구현했기에 중복된 데이터의 저장을 허용하지 않으며, 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.

TreeSet은 기본적으로 오름차순으로 데이터를 정렬한다.

Set set = new TreeSet();

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

System.out.println(set); // [3, 4, 5, 19, 21, 39]

headSet(), tailSet() 메소드

headSet 메소드와 tailSet 메소드를 이용하면, TreeSet에 저장된 객체 중 지정된 기준 값보다 큰 값의 객체들과 작은 값의 객체들을 얻을 수 있다.

TreeSet set = new TreeSet();
int[] score = {80, 95, 50, 35, 45, 65, 10, 100};

for(int i=0; i<score.length; i++)
    set.add(new Integer(score[i]));

System.out.println("50보다 작은 값 : " + set.headSet(new Integer(50))); // [10, 35, 45]
System.out.println("50보다 큰 값 : " + set.tailSet(new Integer(50))); // [50, 65, 80, 95, 100]


LinkedHashSet

LinkedHashSet은 Set 인터페이스를 구현하고, HashSet 클래스를 상속받은 클래스이다. Set 인터페이스를 구현했기에 중복된 데이터의 저장을 허용하지 않지만, 저장 순서는 유지하고 있다.

LinkedHashSet<Integer> lhs = new LinkedHashSet<>();

lhs.add(1);
lhs.add(3);
lhs.add(2);
lhs.add(3);
lhs.add(1);

Iterator<Integer> it = lhs.iterator();
while(it.hasNext()) {
    System.out.print(it.next() + " "); // 1 3 2
}

카테고리:

업데이트:

댓글남기기