본문 바로가기
Java

[Java] ArrayList() / .add() / .toString() / .size() / .get(int Index) / set() / remove(int index) / clear() / indexOf(Object o) / 중복없는 로또 번호 만들기

by bkuk 2022. 10. 6.

ArrayList는 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나입니다.

 

일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작합니다.

 

배열과의 차이점은 배열은 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변합니다.

내부적으로 저장이 가능한 메모리 용량(Capacity)이 있으며 현재 사용 중인 공간의 크기(Size)가 있습니다.

만약 현재 가용량(Capacity) 이상을 저장하려고 할 때 더 큰 공간의 메모리를 새롭게 할당합니다.

자바의 ArrayList를 활용하는 방법을 알아보겠습니다.

 

1. ArrayList 생성

- 초기 용량(Capacity) 생략 가능

ArrayList al1 = new ArrayList();

 

- 초기 용량(Capacity) 설정 - 100의 크기

ArrayList al2 = new ArrayList( 100 );

 

2. 데이터 삽입 방법 - .add()

- add() 메서드로 데이터 추가

// add("element")
// element는 자료형이 'String' 이나, 'Object'로 자동 형변환 됨.
al1.add( "홍길동" );

 

- 메서드가 아닌 형변환 과정을 표현

// 아래는 자동 형변환 과정에 대한 내용
// 결론적으로, add() 메서드와의 출력은 같음
String str = "홍길동";
Object obj = str;
al1.add( obj );

 

3. 데이터 확인 - .toString() .size()

// 객체 생성
ArrayList al1 = new ArrayList();

// 데이터 추가
al1.add( "홍길동" );
al1.add( "박문수" );

// 배열 전체 확인
System.out.println( al1.toString());

// 크기 확인( length가 아닌 size )
System.out.println( al1.size());

 

4. 데이터 가져오기 -.get( int index)

- get() 메서드와 인덱스, 명시적 형변환을 통해 데이터 가져오기 

// get() - 데이터 가져오기
// 명시적 형변환
Object obj1 = al1.get(0);
String str1 = (String) obj1;
System.out.println( str1 );	// 홍길동

 

- 1번 인덱스 가져오기

System.out.println( (String)al1.get(1) );	//박문수

 

- for문을 통해 가져오기

for( int i = 0; i < al1.size(); i++ ) {
    System.out.println( (String)al1.get(i) );
}

 

- 향상된 for문을 통해 가져오기

for( Object objs : al1) {
    System.out.println( (String)objs );
}

 

5.  데이터 추가 삽입

- ArrayList에 [홍길동, 박문수, 이몽룡] 데이터가 있었다는 가정

// 해당 인덱스, 삽입 내용
al1.add( 2, "월매");
System.out.println( al1.toString() );	// [홍길동, 박문수, 월매, 이몽룡]

 

6.  데이터 수정 -.set()

// 해당 인덱스, 삽입 내용
al1.set(2, "방자");
System.out.println( al1.toString() );	// [홍길동, 박문수, 방자, 이몽룡]

 

7.  데이터 삭제 - .remove(int index), .clear()

- 해당 인덱스 삭제

al1.remove(2);
System.out.println( al1.toString() );	// [홍길동, 박문수, 이몽룡]

 

- 초기화

al1.clear();
System.out.println( al1.toString() );	// []

 

8.  데이터 찾기 - .indexOf( Object o)

// [홍길동, 박문수, 이몽룡]
System.out.println( al1.indexOf( "이몽룡" ) );	//  2 반환 
System.out.println( al1.indexOf( "이몽룡1" ) );	// -1 반환

9. 로또번호 추출

public class LottoEx01 {
	public static void main(String[] args) {
	
		ArrayList lottos = new ArrayList();	//// ArrayList 클래스 생성

		while(true) {	// 무한루프
			int i = (int)(( Math.random() * 45) +1); // 1 <= x < 46 난수 발생0
			if( lottos.indexOf( i ) == -1) {	// // ArrayList에 변수 i의 값이 없으면
				lottos.add( i );	// ArrayList에 데이터를 추가하고
			}
			if( lottos.size() == 6 ) { // ArrayList의 크기가 6이면
				break;	// 반복문을 종료한다.
			}
		}
			System.out.println( lottos.toStrng() );
	}
}