일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 고잉버스
- 백준 java
- 리눅스마스터 3과목
- 스프링 빈
- 월간코드챌린지
- 리눅스마스터 1급 정리
- 반복문
- JavaScript
- Java
- 리눅스
- toCharArray
- 자바스크립트 코딩의 기술
- 프로그래머스
- 백준 javascript
- Memoir
- 코테
- 명령어
- 연습문제
- 문자열
- Kotlin
- 카카오
- 코딩테스트
- 개발자 회고록
- Linux
- map
- 자바
- 리눅스마스터1급
- 스프링 컨테이너
- java 백준 1차원 배열
- GoingBus
- Today
- Total
hoon's bLog
Java Set Collection Class, 자바 Set 선언 예제 본문
이번 포스팅에서는 Set에 대해 얘기해보려고 한다.
사실 개인적으로 많이 쓰고 있지 않아서 포스팅할까 말까 고민이 좀 됐지만,
그래도 최근에 실무하면서 꽤나 도움이 되었어서, 다시 한번 복습할 겸 포스팅을 해본다.
Set 컬렉션 클래스란?
Set은 HashSet과 TreeSet이 상속받고 있다.
또한 List와 함께 Collection을 상속받고 있지만 List와는 다르게 저장된 값이 순서가 없으며 중복을 허용하지 않는다.
HashSet<E> 클래스
문법은 다음과 같다.
import java.util.HashSet;
import java.util.Set;
Set<Object> set = new HashSet<Object>();
HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스이고,
JDK 1.2부터 제공된 HashSet 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.
이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다.
HashSet 클래스는 Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.
만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 된다.
(라고 하는데 LinkedHashSet은 사용한걸 잘 못봤다;;)
Set 또한 예제를 통해 알아보자!
// Set 선언
HashSet<String> hs01 = new HashSet<String>();
HashSet<String> hs02 = new HashSet<String>();
// add() 메서드를 이용한 요소의 저장
hs01.add("홍길동");
hs01.add("이순신");
System.out.println(hs01.add("임꺽정")); // result: true
System.out.println(hs01.add("임꺽정")); // result: false / 중복된 요소의 저장
// for-each문과 get() 메서드를 이용한 요소의 출력
for (String e : hs01) {
System.out.print(e + " "); // result: 홍길동 이순신 임꺽정
}
// add() 메서드를 이용한 요소의 저장
hs02.add("임꺽정");
hs02.add("홍길동");
hs02.add("이순신");
// iterator() 메서드를 이용한 요소의 출력
Iterator<String> iter02 = hs02.iterator();
while (iter02.hasNext()) {
System.out.print(iter02.next() + " "); // result: 홍길동 이순신 임꺽정
}
// size() 메서드를 이용한 요소의 총 개수
System.out.println("집합의 크기 : " + hs02.size()); // 집합의 크기 : 3
위의 예제를 통해, 요소의 저장 순서를 바꿔도 저장되는 순서에는 영향을 미치지 않는 것을 확인할 수 있다.
또한, add() 메서드를 사용하여 해당 HashSet에 이미 존재하는 요소를 추가하려고 하면,
해당 요소를 저장하지 않고 false를 반환하며 중복이 불가한 것을 볼 수 있다.
Set 인터페이스 메서드
Set 인터페이스는 Collection 인터페이스를 상속받으므로,
Collection 인터페이스에서 정의한 메소드도 모두 사용할 수 있다.
Set 역시 인터페이스에서 제공하는 주요 메서드가 있으니 숙지하면 좋겠다!
boolean add(E e) | 해당 집합(set)에 전달된 요소를 추가함. |
void clear() | 해당 집합의 모든 요소를 제거함. |
boolean contains(Object o) | 해당 집합이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 집합과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 집합이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 집합의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 집합에서 전달된 객체를 제거함. |
int size() | 해당 집합의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 집합의 모든 요소를 Object 타입의 배열로 반환함. |
이렇게 Set을 끝으로 컬렉션 클래스에 대해서 알아보았다.
보면 알겠지만 특별히 중복 제거하는 로직이 없어도 Set에 데이터를 저장하면,자연스레 중복을 거를 수 있다!
언제나 새로운 정보 공유와 잘못된 정보
비판/지적/태클은 환영입니다!
끝.
Reference
http://www.tcpschool.com/java/java_collectionFramework_set
https://docs.oracle.com/javase/8/docs/api/java/util/Set.html
'IT > Java' 카테고리의 다른 글
Java Map Collection Class, 자바 맵 선언 및 사용 (4) | 2023.08.04 |
---|---|
Java Stack, Queue Collection Class, 자바 큐 스택 선언 및 생성 (0) | 2023.07.31 |
Java List Collection Class 자바 리스트 컬렉션 클래스 (2) | 2023.07.28 |
Java generic 자바 다양한 제네릭 표현 (0) | 2021.01.26 |
Java Generic 자바 제네릭 선언 및 생성 (0) | 2021.01.11 |