안 씀/java-개념

ArrayList<E>

unhyepnhj 2024. 6. 9. 20:14

ArrayList<E>의 특성

 

java.util.ArrayList

- <E>에서 E 대신 요소로 사용할 특정 타입을 지정하여 구체화

- 가변 크기의 배열을 구성한 클래스

 

ArrayList에 삽입 가능한 것

- 객체

- null

- 기본 타입은 Wrapper 객체로 만들어 저장 

 

ArrayList에 객체 삽입/삭제

- 리스트의 맨 뒤에 객체 추가

- 리스트의 중간에 객체 삽입

- 임의의 위치에 있는 객체 삭제 가능

 

벡터와 달리 스레드 동기화 기능 없음

- 다수의 스레드(멀티스레드)가 동시에 ArrayList에 접근할 때 동기화되지 않음

- 개발자가 스레드 동기화 코드 작성 

 

ArrayList 클래스는 Vector 클래스와 거의 동일하지만 스레드 간 동기화를 지원하지 않으므로 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList 데이터가 훼손될 우려가 있음

하지만 멀티스레드 동기화를 위한 시간 소모가 없기 때문에  단일 스레드 응용에는 Vector보다 효과적


ArrayList 생성

ArrayList<String> a = new ArrayList<String>();
ArrayList<String> a = new ArrayList<>(); 	//Java 7부터 간략히 쓸 수 있음
var a = new ArrayList<String>();		//Java 10부터 간략히 쓸 수 있음

- ArrayList<E>의 E에 요소로 사용할 값 지정 

ArrayList<String> a = new ArrayList<String>(); 생성

 

ArrayList<E> 클래스 주요 메소드 


ArrayList에 요소 삽입

 

add() 메소드를 사용하여 ArrayList 끝에 요소 삽입

ArrayList<String> a = new ArrayList<String>();
a.add("Hello");
a.add("Hi");
a.add("Java");

- E에 String을 지정했으므로 String 타입 요소만 삽입 가능 

a.add(5);			//컴파일 오류
a.add(new Point(3, 5));		//컴파일 오류
a.add(null);			//null 삽입 가능

 

add(int index, E element) 메소드를 사용하여 ArrayList 중간에 요소 삽입

a.add(2, "string");	//인덱스 2의 위치에 "string" 삽입
a.add(10, "string");	//컴파일 오류. 코드 실행 전 ArrayList에 들어 있는 요소의 개수보다 큰 인덱스에는 삽입 불가

- add()는 ArrayList의 끝이나 중간에만 요소를 삽입


ArrayList 내의 요소 알아내기

- get()이나 elementAt() 메소드 

String str = a.get(1);	//인덱스 1의 위치에 있는 요소 리턴

ArrayList의 크기 알아내기

- size() 메소드

- Vector와 달리 현재 용량을 리턴하는 메소드 없음

int len = a.size();	//ArrayList에 들어 있는 요소의 개수

ArrayList에서 요소 삭제

- remove() 메소드 

- clear() 메소드: ArrayList의 모든 요소 삭제 

a.remove(1);	//인덱스 1 위치에 있는 요소 삭제
a.clear();	//ArrayList의 모든 요소 삭제

 

Vector랑 사용법 비슷한 듯

이만 줄이겠습니다


예제 7-3 이름을 4개 입력받아 ArrayList에 저장하고 모두 출력한 후 제일 긴 이름을 출력하는 프로그램 작성