[Java] Set
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
}
댓글남기기