반응형
ArrayList 는 프로젝트하면서 정말 많이 사용한다.
저장순서가 유지되고 중복을 허용한다는 특징을 갖고 있다.
Vector와 비슷한데, Vector는 기존에 작성된 소스와의 호환성을 위해 남겨 둔 거라서 Vector보다는 ArrayList를 사용하는 것이 좋다.
ArrayList는 Object배열을 이용해서 데이터를 순차적으로 저장한다.
만약, 배열에 더 이상 저장 할 공간이 없다면 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음 저장된다.
public class ArrayList extends AbstractList {
implements List, RandomAccess, Cloneable, java.io.Serializable {
...
transient Object[] elementData; //오브젝트배열
...
}
}
메서드 | 설명 |
ArrayList() | 크기가 10인 ArrayList 생성 |
ArrayList(Collection c) | 주어진 컬렉션이 저장된 ArrayList를 생성 |
ArrayList(int initialCapacity) | 지정된 초기용량을 갖는 ArrayList를 생성 |
boolean add(Object o) | ArrayList의 마지막에 객체를 추가. 성공하면 true |
void add(int index, Object element) | 지정된 index에 객체를 저장 |
boolean addAll(Collection c) | 주어진 컬렉션의 모든 객체를 저장 |
boolean addAll(int index, Collection c) | 지정된 위치부터 주어진 컬렉션의 모든 객체를 저장 |
void clear() | ArrayList를 완전비 비움 |
Object clone() | ArrayList를 복제 |
boolean contains(Object o) | 지정된 객체(o)가 ArrayList에 포함되어 있는지 확인 |
void ensureCapacity(int minCapacity) | ArrayList의 용량이 최소한 minCapacity가 되도록 함. |
Object get(int index) | 지정된 위치(index)에 저장된 객체를 반환 |
int indexOf(Object o) | 지정된 객체가 저장된 위치를 찾아 반환 |
boolean isEmpty() | ArrayList가 비어있는지 확인 |
Iterator iterator() | ArrayList의 Iterator 객체를 반환 |
int lastIndexOf(Object o) | 객체(o)가 저장된 위치를 끝부터 역방향으로 검색해서 반환 |
ListIterator listIterator() | ArrayList의 ListIterator를 반환 |
ListIterator listIterator(int index) | ArrayList으 ㅣ지정된 위치부터 시작하는 ListIterator를 반환 |
Ojbect remove(int index) | 지정된 index에 있는 객체를 제거 |
boolean remove(Object o) | 지정된 객체를 제거(성공시 true, 실패시 false) |
boolean removeAll(Conllection c) | 지정한 컬렉션에 저장된 것과 동일한 객체들을 ArrayList에서 제거 |
boolean retainAll(Collection c) | ArrayList에 저장된 객체 중에서 주어진 컬렉션과 공통된 것들만을 남기고 나머지는 삭제 |
Object set(int index, Object element) | 주어진 element를 지정된 index에 저장 |
int size() | ArrayList에 저장된 객체의 개수를 반환 |
void sort(Comparator c) | 지정된 정렬기준(c)으로 ArrayList를 정렬 |
List subList(int fromIndex, int toIndex) | fromIndex부터 toIndex 사이에 저장된 객체를 반환 |
Object[] to Array() | ArrayList에 저장된 모든 객체들을 객체비열로 반환 |
Object[] toArray(Ojbect[] a) | ArrayList에 저장된 모든 객체들을 객체배열 a에 담아 반환 |
void trimToSize() | 용량을 크기에 맞게 줄임.(빈 공간 없앰.) |
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListEx1 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
list1.add(5);
list1.add(4);
list1.add(2);
list1.add(1);
list1.add(3);
list1.add(0);
//list1의 index 1 ~ 4(4미포함) 사이에 저장된 객체를 반환
ArrayList list2 = new ArrayList(list1.subList(1, 4));
print(list1, list2);
//결과
//list1: [5, 4, 2, 1, 3, 0]
//list2: [4, 2, 1]
//정렬
Collections.sort(list1);
Collections.sort(list2);
print(list1, list2);
//결과
//list1: [0, 1, 2, 3, 4, 5]
//list2: [1, 2, 4]
//list1이 list2의 모든 요소를 포함하고 있을 때 true
System.out.println("list1.containsAll(list2) : " + list1.containsAll(list2));
//결과
//list1.containsAll(list2) : true
//list1에 A,C 추가
list1.add("A");
list1.add("C");
print(list1, list2);
//결과
//list1: [0, 1, 2, 3, 4, 5, A, C]
//list2: [1, 2, 4]
//list1 index 3에 B 추가
list1.add(3, "B");
//list2 index 3에 A 추가
list2.add(3, "A");
//list2 3을 "AA"로 수정
list2.set(3, "AA");
print(list1, list2);
//결과
//list1: [0, 1, 2, B, 3, 4, 5, A, C]
//list2: [1, 2, 4, AA]
//list1에서 list2와 겹치는 부분만 남기고 나머지 삭제
System.out.println("list1.retainAll(list2) : " + list1.retainAll(list2));
//결과
//ist1.retainAll(list2) : true(변화가 있었음을 의미)
print(list1, list2);
//결과
//list1: [1, 2, 4]
//list2: [1, 2, 4, AA]
//list2에서 list1에 포함된 객체들을 삭제
for (int i = list2.size() - 1; i >= 0; i--) {
if (list1.contains(list2.get(i))) {
list2.remove(i);
}
}
print(list1, list2);
//결과
//list1: [1, 2, 4]
//list2: [AA]
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1: " + list1);
System.out.println("list2: " + list2);
System.out.println("");
}
}
* ArrayList를 생성할 때, 저장할 요소의 개수를 고려해서 실제 저장할 개수보다 약간 여유있는 크기로 하는 것이 좋다.
생성할 때 지정한 크기보다 더 많은 객체를 저장하면 자동적으로 크기가 늘어나기는 하지만 이 과정에서 처리시간이 많이 소요된다.
참고] 자바의 정석
반응형
'DEV > Java' 카테고리의 다른 글
[자바] Stack(스택)과 Queue(큐) (3) | 2023.02.12 |
---|---|
[자바] LinkedList (3) | 2023.02.11 |
[자바] 컬렉션 프레임워크(Collections Framework) (4) | 2023.02.05 |
[자바] java.time 패키지 (5) | 2023.02.03 |
[자바] MessageFormat (3) | 2023.02.02 |
댓글