ArrayList - Collection
- 배열 vs 컬렉션
- 배열 : 수정 및 검색 가능, 인덱스 추가 및 삭제는 불가
- 컬렉션 : 데이터가 띄엄띄엄 들어감, 다음 번지의 주소 저장
- 데이터 추가, 삭제, 수정, 검색 가능


package algo;
import java.util.ArrayList;
public class Lotto01 {
public static void main(String[] args) {
// 배열 vs 컬렉션
// int -> Integer
// double -> Double
// String -> String
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(1);
arr.add(3);
arr.add(5);
System.out.println(arr.get(0));
System.out.println(arr.get(1));
System.out.println(arr.get(2));
}
}
로또 문제
- 1 ~ 45의 수 중 중복되지 않는 무작위의 6개의 수를 출력하시오.
문제 분석
- 무작위의 수 : 난수 활용 = Math.random()
- 숫자가 나오는 대로 배열에 추가 : 배열 or 컬렉션 활용
- 중복 방지 : 같은 수일 경우 저장 X
코드 작성 - Sampling, Moduling
package algo;
import java.util.ArrayList;
import java.util.Random;
public class Lotto01 {
public static void main(String[] args) {
// 1. Sampling : 1 ~ 45까지의 중복되지 않는 6개의 수를 추출하시오.
// 2. Hard Coding : 특징 찾기
// 1. 난수 활용 필요 : Random 패키지 사용
// 2. 6개의 수를 뽑고, 저장이 필요 : 배열 사용
// 3. 중복되지 않기 위해서 이전의 인덱스와 비교가 필요
// 중복 시? 다시 번호 추첨
// 4. for의 횟수는 정해져 있는데 어떻게 계속 반복? : i를 감소
// 5. 중복 확인 시 : 값 저장에 사용하는 for 변수 i = j + 1
// 6. 첫 번째 값은 무조건 넣고, 두 번째부터는 현재 인덱스 전의 값 까지만 비교하려면?
// 배열 vs 컬렉션
// int -> Integer
// double -> Double
// String -> String
// ArrayList<Integer> arr = new ArrayList<Integer>();
// 이 예제에서는 배열을 사용하기 때문에 컬렉션은 주석 처리함.
int[] arr2 = new int[6];
Random rand = new Random();
// 3-1. 숫자 정렬을 위한 버블정렬 함수 클래스 선언
Uc f = new Uc();
// 3. Moduling
for (int i = 0; i < 6; i++) {
// 3-2. 난수를 뽑기 위한 Random() 클래스
int number = rand.nextInt(45) + 1; // 1 ~ 45의 수
// 3-3. 예외 1 : 첫 항은 무조건 배열에 삽입
if (i == 0) arr2[i] = number;
else {
for (int j = 0; j < i; j++) {
// 3-4. 중복이 아닐 경우 배열에 저장
if (arr2[j] != number) arr2[i] = number;
// 3-5. 예외 2 : 중복일 경우 i를 1 감소시킨 후 다시 난수 추출
// j = i - 1을 대입함으로써 중복 체크용 반복문 바로 종료
else {
i--;
j = i - 1;
}
}
}
}
// 결과 출력
System.out.print("당첨 번호 : ");
// 3-6. 결과 버블 정렬 (오름차순)
int[] result = f.bubble(arr2);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
}
}
Hard Coding과 Moduling을 통해 알아낸 특징
- 난수 활용 필요 : Random 패키지 사용 (Boundary 지정 가능)
- 6개의 수를 뽑고, 저장이 필요 : 배열 사용 (컬렉션을 사용해도 됨)
- 중복되지 않기 위해서 이전의 인덱스와 비교가 필요
- 중복 시? 다시 번호 추첨
- 중복일 경우 i를 1 감소시킨 후 다시 난수 추출
- j = i - 1을 대입함으로써 중복 체크용 반복문 바로 종료
- for의 횟수는 정해져 있는데 어떻게 계속 반복? : i를 감소
- 중복 확인 시 : 값 저장에 사용하는 for 변수 i = j + 1
- 첫 번째 값은 무조건 넣고, 두 번째부터는 현재 인덱스 전의 값 까지만 비교하려면?
- j < i의 조건은 동일하되, i를 무조건 한 번 실행시키면 됨.
결과
- 1회차

- 2회차

- 3회차

Share article