Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- IntelliJ IDEA
- While
- 상수
- 생성자
- for문
- Thread
- 인텔리제이 기초 설정
- OPP개념
- continue문
- multi-threading
- 포함관계
- break문
- this예약어
- 메서드
- Java데이터 타입
- 형 변환
- 컴파일
- 연관관계
- JAVA객체지향
- function
- 접근제어지시자
- Java
- java변수
- 집합관계
- JAVA기초
- 인텔리제이 한글 깨짐 해결법
- 메서드 오버로딩
- 반복문
- 자바 멀티스레딩
- 시스템 환경 변수 편집
Archives
- Today
- Total
최원종의 개발 블로그
Set 인터페이스 - 컬렉션 본문
List 와 Set 의 결정적 차이
- List 는 같은 값을 여러 번 저장할 수 있다.
- Set 은 같은 값을 저장할 수 없다
List : [철수, 영희, 철수, 민준] → 철수가 두 번 들어가도 됨
Set : [철수, 영희, 민준] → 철수를 두 번 넣으면 한 번만 저장됨
Collection (인터페이스)
|
├── List (인터페이스)
│ ├── ArrayList
│ ├── LinkedList
│ ├── Vector
│ └── ...
│
├── Set (인터페이스)
│ ├── HashSet
│ ├── LinkedHashSet
│ ├── TreeSet
│ └── ...
Set 의 세 가지 특징
1. 중복 불허 : 같은 값은 한 번만 저장됩니다
2. 순서 없음 : 넣은 순서가 보장되지 않습니다
3. 가변 크기 : 추가/삭제 시 크기가 자동으로 변합니다
Set 이 필요할 때 ( 중복을 자동으로 제거하고 싶을 때)
사용자 아이디 목록 → 아이디는 중복 불가
로또 번호 6개 뽑기 → 같은 번호 중복 불가
방문한 페이지 기록 → 같은 페이지 중복 제거
HashSet 기본 사용법
- Set 계열의 가장 기본적인 구현체
- 순서 없음 : 넣은 순서대로 저장되지 않음
- null 허용 : null 값을 한 번 저장할 수 있음
- 빠른 속도 : 내부적으로 해시 테이블을 사용해서 add(), remove(), contains() 가 빠름
해시 테이블이란?
값을 저장할 위치를 계산으로 결정하는 자료구조
-- 사물함 비유 —
일반 방식 (배열/리스트)
사물함 1번부터 순서대로 빈 칸 찾아서넣기
찾을 때도 1번부터 하나씩 열어봐야 함 → 느림
해시 테이블 방식
이름표를 계산기에 넣으면 → "37번 사물함에 넣어"
찾을 때도 계산기에 넣으면 → "37번 사물함 열어봐" → 바로 찾음, 빠름
-실습 코드
package collection.set;
import java.util.HashSet;
import java.util.Set;
public class SetEx {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//추가
set.add("철수");
set.add("영희");
set.add("철수");// 중복1 무시됨
System.out.println(set.contains("철수"));
System.out.println(set.contains("민준"));
// set.contains("철수");//true
//set.contains("민준"); //false
//삭제
set.remove("철수");
//전체 순회
for (String name : set) {
System.out.println(name);
}
}
}
-로또 게임 코드
package collection.set;
import java.util.*;
public class LottoGame {
public static void main(String[] args) {
Set<Integer> lotto = new HashSet<>();
Random random = new Random();
//6개가 될 때까지 계속 추가
while (lotto.size() < 6) {
int number = random.nextInt(45) + 1; //1~45
lotto.add(number);
}
System.out.println("이번 주 로또 번호 : " + lotto);
System.out.println("총 " + lotto.size() + " 개");
//로또 번호 오름차순 정렬
List<Integer> list = new ArrayList<>(lotto);
Collections.sort(list);
System.out.println("로또 오름차순 정렬 : " + list);
}
}
List vs Set 비교
| List | Set | |
| 순서 | 유지됨 | 유지 안 됨 |
| 중복 | 허용 | 불허 |
| 인덱스 접근 | 가능 (get(0)) | 불가 |
| 주요 구현체 | ArrayList, Vector | HashSet |
| 사용 상황 | 순서가 중요할 때 | 중복 없이 관리할 때 |
핵심 요약
Set 인터페이스
중복 불허, 순서 없음, 크기 자동 조절
HashSet
Set 의 가장 기본적인 구현체
add() 로 추가, 중복이면 false 반환 후 무시
contains() 로 포함 여부 확인
언제 쓰나요?
중복 없이 데이터를 관리해야 할 때
예: 아이디 목록, 로또 번호, 중복 제거
'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| 컬렉션 프레임워크 실습 - 회원 관리 시스템 (0) | 2026.03.31 |
|---|---|
| Map 인터페이스 - 컬렉션 (0) | 2026.03.31 |
| List 인터페이스 - 컬렉션 (0) | 2026.03.30 |
| Vector - 컬렉션 (0) | 2026.03.30 |
| ArrayList - 컬렉션 (0) | 2026.03.30 |


