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() );
}
}
'Java' 카테고리의 다른 글
[Java] 헷갈리는 내용 다시 정리 / 변수 / 클래스 자료형 /인스턴스 참조 변수 / 클래스 형변환 / 다운 캐스팅 / 추상 클래스 / 추상 메서드 / 인터페이스 등 (0) | 2022.10.07 |
---|---|
[Java] String 클래스(객체) 차이 / new String() vs "" / equals() / == 연산자 (0) | 2022.10.06 |
[Java] Scanner 클래스를 활용한 console에서 단을 입력 받으면 구구단 출력하는 프로그램 (0) | 2022.10.05 |
[Java]Scanner 클래스 (0) | 2022.10.05 |
[Java] Math.random() 메서드와 비슷한 Random 클래스 / Random(Seed) / Seed란? (0) | 2022.10.05 |