
Set
- 순서에 상관없이 데이터만 저장하고 싶을 때 사용한다.
- 동일한 데이터를 중복해서 가질 수 없다.
- Collection 인터페이스에 정의된 메소드를 제공하며 데이터의 중복만 막도록 설계되어 있다.
- 종류로는 “HashSet”, “TreeSet”, “LinkedHashSet” 3가지가 있다.
HashSet
- 해쉬 테이블에 원소를 저장하기 때문에 성능면에서 가장 우수하지만, 원소들의 순서가 일정하지 않다.
TreeSet
- 레드-블랙 트리(red-black tree)에 원소를 저장한다. 따라서 값에 따라 순서가 결정되지만 HashSet보다 느리다.
LinkedHashSet
- 해쉬 테이블과 연결 리스트를 결합한 것으로 원소들의 순서는 삽입되었던 순서와 같다.
- 약간의 비용을 들여 HashSet의 문제점인 순서의 불명확성을 제거한 방법이다.
Set을 사용한 코드
- Set의 특징인 중복을 허용하지 않는 것을 확인하는 코드
package ex13;
import java.util.*;
public class FindDupplication {
public static void main(String[] args) {
Set<String> s = new HashSet<>();
String[] sample = {"사과", "사과", "바나나", "토마토"};
for (String a : sample) {
if (!s.add(a)) {
System.out.println("중복된 단어: " + a);
}
}
System.out.println(s.size() + " 중복되지 않은 단어: " + s);
}
}
// 중복된 단어: 사과
// 3 중복되지 않은 단어: [토마토, 사과, 바나나]
- HashSet, TreeSet, LinkedHashSet을 모두 사용한 코드
package ex13;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
public class SetTest1 {
public static void main(String[] args) {
// HashSet
HashSet<String> set1 = new HashSet<>();
set1.add("Milk");
set1.add("Bread");
set1.add("Butter");
set1.add("Cheese");
set1.add("Ham");
set1.add("Ham");
System.out.println(set1);
if (set1.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
// LinkedHashSet - 입력 순서대로 출력
LinkedHashSet<String> set2 = new LinkedHashSet<>();
set2.add("Milk");
set2.add("Bread");
set2.add("Butter");
set2.add("Cheese");
set2.add("Ham");
set2.add("Ham");
System.out.println(set2);
if (set2.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
// TreeSet - 알파벳 순대대로 출력
TreeSet<String> set3 = new TreeSet<>();
set3.add("Milk");
set3.add("Bread");
set3.add("Butter");
set3.add("Cheese");
set3.add("Ham");
set3.add("Ham");
System.out.println(set3);
if (set3.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}
// HashSet
// [Ham, Butter, Cheese, Milk, Bread]
// Ham도 포함되어 있음
// LinkedHashSet
// [Milk, Bread, Butter, Cheese, Ham]
// Ham도 포함되어 있음
// TreeSet
// [Bread, Butter, Cheese, Ham, Milk]
// Ham도 포함되어 있음
Share article