Simple&Natural
Shuffle 구현 본문
728x90
하단 링크의 알고리즘을 이용하여 직접 Collection에 대한 Shuffle 함수를 만들 수 있다.
찾아보니 자체적으로 Shuffle을 지원해주므로 따로 구현할 필요는 없다.
자바 api 에서는 다음과 같이 shuffle을 구현하고 있다.
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
Object arr[] = list.toArray();
// Shuffle array
for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));
// Dump array back into list
// instead of using a raw type here, it's possible to capture
// the wildcard but it will require a call to a supplementary
// private method
ListIterator it = list.listIterator();
for (int i=0; i<arr.length; i++) {
it.next();
it.set(arr[i]);
}
}
}
참고로 swap은 요거
private static void swap(Object[] arr, int i, int j) {
Object tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
랜덤 알고리즘)
en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm
728x90
'언어 > Java&Kotlin' 카테고리의 다른 글
substring 사용법 (0) | 2020.12.25 |
---|---|
Java String Format 참고자료 (0) | 2020.12.16 |
Coroutine Async 의 동작 시점 (0) | 2020.10.11 |
Coroutine - withContext 와 coroutineScope 의 비교 (0) | 2020.08.29 |
자바 메모리 관리 - 스택&힙 (0) | 2020.06.25 |