개념
- Set은 자바 컬렉션 프레임워크의 일부로, 중복되지 않는 요소의 집합을 나타내는 데이터 구조이다
주요 특징
중복제거
set은 중복된 요소를 허용하지 않는다. 같은 값을 넣으려고 하면 무시당함순서없음
Set의 구현체 중 일부는 순서를 보장하지 않는다
예외) LinkedHashSet과 TreeSet은 순서를 유지한다(입력순서 또는 정렬 순서)퍼포먼스
일반적으로 검색,추가,삭제 연산이 O(1)과 O(log n) 의 시간 복잡도
주요 구현체
- HashSet
해시 테이블 기반의 구현으로, 중복을 허용하지 않고 순서 없음
시간 복잡도: O(1)Set<String> hashSet = new HashSet<>(); hashSet.add("Apple"); hashSet.add("Banana"); hashSet.add("Apple"); // 중복이므로 추가되지 않음
- LinkedHashSet
HashSet과 비슷하지만, 순서 유지Set<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("Apple"); linkedHashSet.add("Banana"); linkedHashSet.add("Cherry");
- TreeSet
순서 유지
시간복잡도 O(log n)Set<Integer> treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(1); treeSet.add(2); // 요소가 오름차순으로 정렬됨
주요 메서드
- add: 요소 추가. 중복된 경우 false 반환
- remove(Object obj): 요소 제거. 성공하면 true 반환
- contains(Object obj): 요소가 포함되어 있는지 확인. 있으면 true 반환
- size(): Set의 크기 반환
- isEmpty(): 비어있는지 확인
- clear(): 모든 요소 삭제
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetExam {
public static void main(String[] args) {
Set<String> set1=new HashSet<>();
boolean flag1=set1.add("kang");
boolean flag2=set1.add("kim");
boolean flag3=set1.add("kang");
System.out.println(set1.size()); //중복 없이 kang,kim : 2개 출력
System.out.println(flag2);
System.out.println(flag3);
Iterator<String> iterator=set1.iterator();
while(iterator.hasNext()){ //있으면 true, 없으면 false
String str=iterator.next(); // 값 가져옴, 하나 꺼내면 자동으로 다음것 참조
System.out.println(str);
}
}
}
import java.util.*;
public class SetExam{
public static void main(String[] args){
Set<String> set = new HashSet<String>();
set.add("a");
set.add("a"); // 추가되지 않음
set.add("b");
System.out.println("set의 내용을 출력합니다.");
for(String str : set){
System.out.println(str);
}
}
}
문제 설명
Iterator iter의 hasNext와 next메소드를 이용해서 set의 내용을 모두 출력해 보세요.
import java.util.*;
public class SetExam{
public static void main(String[] args){
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
//iter를 이용해서 set의 내용을 출력하세요.
}
}
Iterator
- 요소들을 순회하는 방법을 제공하는 인터페이스
컬렉션의 내부 구조를 알 필요 없이, 데이터 구조의 요소를 차례로 접근하고 조작 가능- 주요 메서드
hasNext(): 다음 요소가 있으면 true
next(): 다음 요소 반환, hasNext()로 존재를 확인한 후 호출해야함
remove(): 마지막으로 반환된 요소 제거