ArrayList 특징 ?
- List 인터페이스의 구현체 👉 순서가 보장 O , 중복 데이터 허용 O
- 기존 Vector(=호환성을 위해 남김)와 구현원리, 기능이 동일하기에 ArrayList를 사용하자
- Object배열을 이용해서 데이터를 순차적으로 저장한다. 👉 위치 값을 사용할 수 있기에 대상 객체 지정하여 다루기 편하다.
- 배열의 공간이 부족 시 새로운 크기의 배열에 기존 배열을 복사 후 저장 👉 추가하는 부분에서 비용이 발생할 수 있다.
ArrayList 기능 ?
형태 | 메서드 | 설명 |
생성자 | ArrayList() | 크기 10인 ArrayList 생성 |
ArrayList(Collection c) | 기존의 컬렉션을 담은 ArrayList 생성 | |
ArrayList(int initialCapacity) | 초기용량을 지정하여 ArrayList 생성 | |
메서드 | boolean add(Object o) | ArrayList의 마지막에 갹체 추가 / 성공 시 true |
void add(int idx, Object elem) | idx위치에 객체를 저장 | |
boolean addAll(Collenction c) | Collection의 모든 객체 저장 | |
boolean addAll(int idx,Collection c) | idx위체부터 Collection의 객체들 저장 | |
void clear() | ArrayList 비우기 | |
Object clone() | ArrayList 복제 | |
boolean contains(Object o) | 해당 객체가 포함되어 있는지 확인 | |
void ensureCapacity(int minCapacity) | ArrayList의 용량이 최소한 minCapacity가 되도록 한다. | |
Object get(int idx) | 해당 위치에 객체를 반환 | |
int indexOf(Object o) | 해당 객체의 위치(idx)를 반환 , 없을 시 -1 | |
int lastIndexOf(Object o) | 해당 객체를 끝에서부터 찾는다. | |
Iterator iterator() | ArrayList의 Iterator객체를 반환 | |
boolean isEmpty() | ArrayList가 비어져 있는지 확인 | |
ListIterator listIterator() | ArrayList의 Iterator를 반환 | |
ListIterator listIterator(int idx) | ArrayList의 지정된 위치부터 Iterator를 반환 | |
Object romove(int idx) | 해당 위치의 객체를 제거 | |
boolean romove(Object o) | 지정 객체를 제거 / 실패 : false , 성공 : true | |
boolean romoveAll(Collection c) | 해당 컬렉션에 공통된 객체들을 제거 | |
boolean retainAll(Collection c) | 해당 컬렉션에 공통된 객체들만 남기고 모두 제거 | |
Object set(int idx , Obejct elem) | 해당 위치에 객체를 변경 | |
int size() | ArrayList에 저장된 객체의 수 반환 | |
void sort(Comparator c) | 지정된 정렬기준(c)로 정렬 | |
List subList(int fromIdx, int toInx) | fromIdx 위치에서 toInx 위치사이 객체들을 반환 | |
Object[] toArray() | 저장된 모든 객체를 Object[]로 반환 | |
Object[] toArray(Obeject[] obj) | 매개변수 obj에 담아서 반환 | |
void trimToSize() | 용량을 크기에 맞게 줄인다.(빈 공간을 없앤다.) |
다음과 같이 ArrayList를 활용하여 컬렉션을 다루는데 필요한 메서드들을 정리해봤다. 크게는 데이터를 추가,삭제,조회,수정하는 기능의 메서드들과 ArrayList의 스펙을 확인할 수 있는 메서드들 있으며, 단일 객체를 다루는 메서드들과 ~~All()형태로 다수의 데이트를 한번에 처리하는 기능들로도 나누어 볼 수 있다.
ArrayList의 경우 중복데이터를 저장 가능하며, 순서를 보장하기에 해당 위치를 지정하여 사용할 수 있는 기능들은 매개변수로 idx를 받아서 기능을 수행하는 부분도 확인해 볼 수 있었다.
ArrayList 컬렉션 클래스 멤버변수 ?

👆👆👆👆👆
실제 ArrayList 컬렉션 클래스이다. 다음 코드를 살펴보면 Default 용량은 10이며, 내부적으로 Object[] 배열을 사용하는 것을 확인해 볼 수 있고, 실제저장된 객체 수는 size라는 인스턴스 변수를 사용하는 부분도 볼 수 있다. 추가적으로 ArrayList<E>와 같이 지네릭스를 활용하고 있는 부분도 확인 가능했다.
ArrayList 용량 변동 ?



👆👆👆👆👆
ArrayList에 객체를 추가하다보면 Object[] 배열을 사용하기 용량을 넘어서게 되면 예외가 발생하게 되는데 실제로는 발생하지 않고 계속 추가가 가능하다. 그것이 어떻게 가능한지 다음과 같이 클래스 내부의 코드들을 살펴보면서 확인해볼 수 있었다.
'알고리즘&자료구조 > 자료구조' 카테고리의 다른 글
Deque / PriorityQueue (0) | 2023.02.06 |
---|---|
[List] LikedList (0) | 2023.02.06 |
큐(Queue) (0) | 2022.09.17 |
스택(Stack) (0) | 2022.09.15 |