일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA
- ChatGPT
- @Entity
- set
- addallattributes()
- Login
- @Query
- SEO
- firebase
- router
- GET
- Thymeleaf
- useEffect
- post
- 리액트오류
- HttpSession
- 데이터베이스
- @Controller
- GA4
- 인텔리제이
- mergeattributes()
- @Repository
- 구글애널리틱스
- Polylang
- 구글
- db
- 구글알고리즘
- 워드프레스
- 플러그인
- linkedhastset
- Today
- Total
개발천재
[JAVA] Set 제대로 활용하기, 로또 번호 만들기 본문
Set 이해하기
Set은 중복을 허용하지 않는 데이터 구조이다. 같은 값을 여러 번 저장할 수 없고, 순서도 보장되지 않는다.
Set은 중복된 값을 저장할 수 없기 때문에 동일한 값이 들어오게 되면 데이터가 하나 더 생기는 것이 아니라 기존 데이터가 유지된다. 또한 순서가 있는 List와 달리 Set은 순서를 보장하지 않고, null 값을 저장할 수 있다(단 한번). 또한 내부적으로 해싱(Hashing) 알고리즘을 사용하기 때문에 검색, 추가, 삭제가 빠르다는 장점이 있다.
set은 중복 데이터를 허용하지 않아야 할 때 사용한다. 예를 들어 회원 ID나 이메일을 저장할 때 중복 데이터가 있으면 안되기 때문에 Set을 사용할 수 있다.
✔ 중복 값 저장 불가
✔ 순서가 보장되지 않음
✔ null 값 저장 가능
✔ 빠른 검색과 삭제
자바에서 Set을 구현한 주요 클래스
Set 구현체 | 정렬여부 | 특징 |
HashSet | X, 정렬되지 않음 | 가장 일반적인 Set, 중복 불가, 검색 속도가 빠름 |
LinkedHashSet | O, 입력 순서 유지 | 저장 순서를 유지, HashSet보다 약간 느림 |
TreeSet | O, 자동 정렬됨 | 내부적으로 TreeMap 사용 |
Set 사용하기
HashSet<>, 가장 많이 사용
Set 자체가 중복을 허용하지 않기 때문에 "Apple"을 두 번 추가했지만 한 번만 저장된다. 출력 순서는 예측할 수 없다. (HashSet은 정렬되지 않음) contains()를 이용해 특정 요소가 있는지 확인할 수 있고, clear()로 전체 요소를 삭제할 수 있다.
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.add("Apple"); // 중복된 값, 추가되지 않음
System.out.println(set); // [Banana, Apple, Cherry] (순서는 보장 안됨)
set.remove("Banana"); // 특정 요소 삭제
System.out.println(set.contains("Cherry")); // true (해당 요소가 존재하는지 확인)
set.clear(); // 전체 요소 삭제
System.out.println(set.isEmpty()); // true (비어 있는지 확인)
}
}
LinkedHashSet 사용 예제 (순서 유지)
LinkedHashSet은 HashSet과 달리 입력한 순서가 유지된다. Set이 중복 데이터를 허용하지 않기 때문에 "Apple"을 두 번 추가해도 한 번만 저장된다.
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.add("Apple"); // 중복 추가 불가
System.out.println(set); // [Apple, Banana, Cherry] (입력한 순서 유지)
}
}
TreeSet 사용 예제 (자동 정렬)
TreeSet은 오름차순으로 자동 정렬된다.
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<>();
set.add(30);
set.add(10);
set.add(20);
set.add(10); // 중복 불가
System.out.println(set); // [10, 20, 30] (자동 정렬)
}
}
Set을 이용해 List의 중복 요소 제거하기
리스트에서 중복 요소를 제거하려면 Set으로 변환하면 가능하다.
import java.util.*;
public class RemoveDuplicates {
public static void main(String[] args) {
List<String> list = Arrays.asList("Apple", "Banana", "Apple", "Cherry", "Banana");
Set<String> set = new HashSet<>(list);
System.out.println(set); // [Banana, Apple, Cherry] (중복 제거됨)
}
}
Set 정렬하는 방법
HashSet이나 LinkedHashSet은 정렬 기능이 없으므로, 정렬하려면 List로 변환한 후 정렬해야 한다.
먼저, Set을 List로 변환하고 Collections.sort()를 사용하여 정렬하면 된다.
import java.util.*;
public class SetSorting {
public static void main(String[] args) {
Set set = new HashSet<>();
set.add("Banana");
set.add("Apple");
set.add("Cherry");
// Set -> List 변환 후 정렬
List sortedList = new ArrayList<>(set);
Collections.sort(sortedList);
System.out.println(sortedList); // [Apple, Banana, Cherry] (정렬됨)
}
}
Set 사용하여 로또 번호 만들기
로또번호 만들기
import java.util.HashSet;
import java.util.Set;
public class LottoNumber {
public static void main(String[] args) {
// 로또번호를 담는 Set 자료구조
Set<Integer> lotto = new HashSet<>();
while (lotto.size() < 6) {
int num = ((int)(Math.random() * 45)) + 1;
lotto.add(num);
}
System.out.println(lotto);
}
}
Set을 List로 변경하기
// Set을 List로 바꿔보기
List<Integer> intLotto = new ArrayList<>(lotto);
// 정렬하기
Collections.sort(intLotto);
System.out.println(intLotto);
// 역으로 정렬하기
Collections.sort(intLotto, Collections.reverseOrder());
System.out.println(intLotto);
'개발 준비 > JAVA' 카테고리의 다른 글
[JAVA] stream 이해하기 (2) | 2025.02.24 |
---|---|
[JAVA] List<>와 ArrayList (1) | 2025.02.20 |
[JAVA] 데이터 관리 도우미 컬렉션(Collection) (1) | 2025.02.20 |
[JAVA] Optional 개념과 주요 메서드 (2) | 2025.02.12 |
[JAVA] 열거형 클래스 Enum(enumeration type) (0) | 2025.02.11 |