반응형
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
- 인텔리제이
- Maven
- Button
- html
- 문자열
- vscode
- json
- js
- 테이블
- 배열
- input
- Visual Studio Code
- Java
- windows
- CMD
- string
- 정규식
- table
- 자바
- list
- javascript
- Array
- 이탈리아
- ArrayList
- CSS
- 이클립스
- date
- Eclipse
Archives
- Today
- Total
어제 오늘 내일
[Java] 중복되지 않는 난수 생성하기 본문
Java에서 중복되지 않는 난수 생성 방법
1. Set을 이용한 중복 제거 (빠르고 간단한 방법)
Set은 중복된 값을 자동으로 제거하므로, 중복 없는 난수를 생성하는 가장 간단한 방법입니다.
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class UniqueRandomNumbers {
public static void main(String[] args) {
Random random = new Random();
Set<Integer> uniqueNumbers = new HashSet<>();
int min = 1, max = 100, count = 10; // 1~100 사이의 10개의 난수
while (uniqueNumbers.size() < count) {
int num = random.nextInt(max - min + 1) + min; // min ~ max 범위 난수
uniqueNumbers.add(num);
}
System.out.println("중복되지 않는 난수: " + uniqueNumbers);
}
}
출력 예시
중복되지 않는 난수: [27, 34, 58, 12, 79, 91, 43, 15, 86, 99]
설명
- HashSet은 중복된 값을 자동으로 걸러줌.
- 원하는 개수(count)만큼 난수를 얻을 때까지 반복.
2. List를 섞어서 중복 없는 난수 생성 (범위 내 모든 수를 무작위로 섞기)
난수를 생성하는 대신 숫자 리스트를 섞고 원하는 개수만큼 가져오는 방법입니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UniqueRandomShuffle {
public static void main(String[] args) {
int min = 1, max = 100, count = 10;
List<Integer> numbers = new ArrayList<>();
// 모든 숫자를 리스트에 추가
for (int i = min; i <= max; i++) {
numbers.add(i);
}
// 리스트 섞기 (Shuffle)
Collections.shuffle(numbers);
// 앞에서 count 개수만큼 가져오기
List<Integer> result = numbers.subList(0, count);
System.out.println("중복 없는 난수: " + result);
}
}
출력 예시
중복 없는 난수: [72, 14, 28, 96, 41, 3, 55, 83, 67, 9]
설명
- 1~100까지의 모든 숫자를 리스트에 저장.
- Collections.shuffle()을 이용해 무작위로 섞음.
- subList(0, count)를 이용해 앞에서 count 개수만큼 선택.
3. Stream API를 이용한 중복 없는 난수 생성 (Java 8+)
Java 8부터는 Stream API를 이용하여 중복 없는 난수를 간단하게 생성할 수 있습니다.
import java.util.Random;
import java.util.stream.Collectors;
public class UniqueRandomStream {
public static void main(String[] args) {
int min = 1, max = 100, count = 10;
Random random = new Random();
List<Integer> uniqueNumbers = random.ints(min, max + 1)
.distinct()
.limit(count)
.boxed()
.toList();
System.out.println("중복 없는 난수: " + uniqueNumbers);
}
}
출력 예시
중복 없는 난수: [52, 27, 93, 14, 65, 71, 88, 49, 36, 79]
설명
- random.ints(min, max + 1) → min~max 범위의 무한 스트림 생성.
- .distinct() → 중복 제거.
- .limit(count) → 원하는 개수만큼 선택.
- .boxed() → int를 Integer로 변환
- .toList() → List<Integer> 타입으로 변환
4. SecureRandom을 이용한 보안성이 높은 중복 없는 난수 생성
보안이 중요한 환경에서는 SecureRandom을 사용해야 합니다.
import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Set;
public class SecureRandomUniqueNumbers {
public static void main(String[] args) {
SecureRandom secureRandom = new SecureRandom();
Set<Integer> uniqueNumbers = new HashSet<>();
int min = 1, max = 100, count = 10;
while (uniqueNumbers.size() < count) {
int num = secureRandom.nextInt(max - min + 1) + min;
uniqueNumbers.add(num);
}
System.out.println("보안 난수: " + uniqueNumbers);
}
}
출력 예시
보안 난수: [43, 29, 87, 91, 14, 38, 62, 55, 7, 76]
반응형
'IT > Java' 카테고리의 다른 글
[Java] 로또 번호 생성하기 (1) | 2025.03.22 |
---|---|
[Java] 랜덤 문자열 생성하기 (0) | 2025.03.21 |
[Java] 4자리 수 난수 생성하기 (0) | 2025.03.19 |
[Java] Random 클래스의 시드(Seed)란 (0) | 2025.03.18 |
[Java] Random 클래스 주요 메소드 및 사용법 (0) | 2025.03.17 |
Comments