ArrayList
List 인터페이스의 구현체이며 순차 리스트
순차 리스트의 특징
- 연속된 메모리 공간 사용
- 빠른 조회
- 고정된 크기
- 삽입 및 삭제의 성능이 비효율적임
- 메모리 활용
- 데이터의 접근 방식
- 정렬된 데이터 관리
- 순차 탐색
- 동기화 문제
ArrayList의 특징
- 동적 크기 조정 : ArrayList는 크기가 고정된 배열과 달리 동적으로 크기를 조정할 수 있음. 배열이 가득 차면 내부적으로 더 큰 배열을 생성하고 기존 배열의 요소를 복사하여 확장함
- 인덱스를 통한 빠른 접근 : 배열처럼 ArrayList는 인덱스 통해 요소에 직접 접근할 수 있음. 인덱스를 사용한 조회 연산(get())의 시간 복잡도는 **O(1)**
- 느린 삽입 / 삭제 (중간요소) : 배열처럼 연속된 메모리 공간을 사용하기 때문에 중간에 요소를 삽입하거나 삭제할 경우 나머지 요소들을 이동시켜야 함. 따라서 삽입(add() / insert()) 또는 삭제(remove())의 시간 복잡도는 평균적으로 **O(n)**
- 중복 허용 : ArrayList는 중복 요소를 허용함
- Null 값 허용 : ArrayList는 null값을 요소로 추가하는 것을 허용함
- 비동기 처리가 안됨 : ArrayList는 동기화되지 않은 클래스이므로 멀티스레드 환경에서는 안정하지 않음. 여러 스레드가 동시에 ArrayList를 수정할 경우 ConcurrentModificationException 이 발생할수 있음. 멀티스레드 환경에서 사용하려면 Collections.synchronizedList() 를 사용하여 동기화된 리스트로 만들어야함
- 초기 용량 설정 가능 : ArrayList를 생성할 때 초기 용량을 설정할 수 있음. 초기 용량은 ArrayList가 내부적으로 배열을 생성할 때의 크기임. 만약 초과하면 배열이 자동으로 확장되지만, 초기 용량을 적절히 설정하면 성능을 최적화 할 수 있음
코드 개요
동적으로 학생수를 입력받고 학생수에 따른 학생 이름을 ArrayList를 활용하여 저장후, 출력하는 프로그램
package list;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class List03_ArrayList {
public static void main(String[] args) {
// 동적으로 입력받는 학생이름을 저장한 후 출력하는 코드
// 학생 이름을 담을 List
List<String> studentName = new ArrayList<>();
// 입력받을수 있도록 Scanner 사용
Scanner scanNum = new Scanner(System.in);
Scanner scanName = new Scanner(System.in);
System.out.print(" >>>>> 입력 할 학생 수를 입력하세요 : " );
// 입력받을 학생 수 지정
//String nameTemp = "";
int studentNum = scanNum.nextInt();
for(int i = 0; i < studentNum; i++){
System.out.print(" >>>>> 학생 이름을 입력 하세요 : ");
String nameTemp = scanName.nextLine();
studentName.add(nameTemp);
}
System.out.println(" >>>>> 총 학생 수 : " + studentNum + " 명 ");
for(int j = 0; j < studentName.size(); j++){
System.out.print( (j+1) + " 번째 학생 : " + studentName.get(j) + " | ");
}
}
}
'자료구조 & 알고리즘 > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조] List - 연결리스트 (0) | 2024.10.01 |
---|---|
[자료구조] List - 순차리스트 (0) | 2024.09.25 |
[자료구조] List (0) | 2024.09.19 |
[자료구조] Deque (1) | 2024.09.16 |
[자료구조] 선형자료구조 (1) | 2024.09.13 |