ArrayList<E>
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<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에 저장하고 모두 출력한 후 제일 긴 이름을 출력하는 프로그램 작성