Back-Language/Java
[Java] 중복을 허용하지 않는 컬렉션 - SET
200scs
2024. 7. 16. 21:04
안녕하세요!
다들 뭐하고 지내시나요?
저는 요새 백준 온라인 저지를 통한 코딩 테스트에 매료되어 있습니다 :)
백준 온라인 저지 문제를 풀다보니 조건 중 "~~보다 작거나 같은 자연수이며, 중복되지 않는다"와 같은 조건이 많았습니다.
여기서 "~~보다 작거나 같은", "자연수이며"와 같은 조건은 부등호, 자료형으로 충분히 해결할 수 있는 조건이지만, "중복"에 관한 것은 몇번의 반복문 혹은 조건문으로 떡칠해야 가능하죠...
하지만 Java에서는 중복을 허용하지 않는 자료형을 이미 구현해놨습니다.
이번에는 '중복을 허용하지 않는 자료형' Set
에 대해 알아보려 합니다.
Set
?
먼저 Set
에 대한 개념을 알아보겠습니다.
Set
은 '중복을 허용하지 않는' 특징 포함하여 아래의 특징을 갖고 있습니다.
- 중복을 허용하지 않는다!
- 원소의 순서를 무시한다!
Set
, 파헤쳐보자.
Set
은 java.util 패키지에 속합니다.- 중복된 값을 저장하지 않습니다.
- 순서가 없습니다.
Set
도 interface 입니다!
Set
의 구현 클래스
HashSet
- 해시 테이블을 사용하여 Set을 구현.
- 가장 빠른 검색 속도를 제공
TreeSet
- 이진 검색 트리를 사용하여 Set을 구현.
- 원소를 정렬된 순서로 유지.
LinkedHashSet
- 연결된 해시 테이블로 Set을 구현.
- 원소의 삽입 순서를 유지.
자 예시 한번 봅시다!
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// HashSet 생성(Set은 직접 인스턴스화 할 수 없기 때문에 구현 클래스 중 하나를 사용)
Set<String> set = new HashSet<>(); // `Set` 인터페이스를 통해 `HashSet`을 참조
// 요소 추가
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Banana"); // 중복된 요소는 추가되지 않음
// Set의 크기 출력
System.out.println("Set size: " + set.size()); // -> Set size: 3
// Set의 요소 출력
System.out.println("Set contains:");
for (String item : set) {
System.out.println(item); // Apple Banana Orange
} /* 출력 결과 (순서는 다를 수 있음)
* Set contains:
* Apple
* Orange
* Banana
*/
// 요소 검사
if (set.contains("Apple")) {
System.out.println("Set contains Apple.");// Set contains Apple
}
// 요소 제거
set.remove("Apple");
// 제거 후 Set의 요소 출력
System.out.println("After removing Apple, set contains:");
for (String item : set) {
System.out.println(item);
} /* 출력 결과 (순서는 다를 수 있음):
* After removing Apple, set contains:
* Orange
* Banana
*/
}
}
간단한 예제를 통해 Set
인터페이스에 구현된 메소드들도 살펴보았습니다.
이해 안 되는 부분을 댓글로 남겨주시면 빠른 응답하도록 하겠습니다!