1. ArrayList
ArrayList는 List 인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고, 중복을 허용한다는 특징을 갖는다. ArrayList는 Object 배열을 이용해 데이터를 순차적으로 저장한다. 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장한다.
메서드 | 설명 |
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) | 주어진 컬렉션의 모든 객체를 저장, 즉 붙이기 |
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 반환 |
Object remove(Object o) | 지정한 객체를 제거 |
boolean remove(Object o) | 지정한 객체를 제거 |
boolean removeAll(Collection c) | 지정한 컬렉션에 저장된 것과 동일한 객체들을 ArrayList에서 제거 |
boolean retainAll(Collection c) | ArrayList에 저장된 객체 중에서 주어진 컬렉션과 공통된 것들만 남기고 다 삭제 |
Object set(int index, Object elemet) | 주어진 객체를 지정된 index에 저장 |
int size() | ArrayList에 저장된 객체의 개수 반환 |
void sort(Comparator c) | 지정된 정렬기준으로 ArrayList 정렬 (Comparator은 Comparable 인터페이스가 없거나 기본적인 정렬 순서와는 다른 방식으로 객체를 정렬해야할 경우에 사용한다.) |
List subList(intfromIndex, int toIndex) | fromIndex 부터 toIndex까지에 저장된 객체를 반환 |
Object[] toArray() | ArrayList에 저장된 모든 객체들을 객체배열로 반환 |
Object[] toArray(Object[] a) | ArrayList에 저장된 모든 객체들을 객체배열 a에 담아 반환 |
void trimToSize() | 용량을 크기에 맞게 줄인다. 즉 빈 공간을 없앤다. |
//ArrayList 선언
ArrayList<String> a1 = new ArrayList<String>(); //타입지정해서 선언,기본 capacity는 10
a1.add("A"); //ArrayList 마지막에 객체 추가
a1.add("B");
ArrayList<String> a2= new ArrayList<String>(50); //초기 capacity를 50으로
a2.add("C");
ArrayList<String> a3= new ArrayList<String>(a1); //주어진 Collection을 초기값으로 생성
//붙이기 addAll
System.out.println(a2.addAll(a3)); //a2 +a3 -> true
System.out.println(a2); //[C, A, B]
//복제 clone
Object a4 = a2.clone();
System.out.println(a4); //[C, A, B]
//컬렉션에 저장된 것과 동일한 객체들을
a2.removeAll(a3); // [C, A, B] - [A,B] = [C]
System.out.println(a2);
- 예제 11-2) 긴 문자열 데이터를 원하는 길이로 잘라서 ArrayList에 담은 다음 출력
public static void main(String[] args) {
final int LIMIT = 10; //자르고자 하는 글자 개수
String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
int length = source.length();
//초기 용량이 14인 리스트
ArrayList<String> list = new ArrayList<>(length / LIMIT + 10); //여유있게 크기 잡기 48/10 + 10 = 14
for (int i = 0; i < length; i += LIMIT) { //i = 0,10, 20, 30,40
if (i + LIMIT < length) {
//add는 ArrayList 마지막에 객체 추가
list.add(source.substring(i, i + LIMIT));
} else {
list.add(source.substring(i));
}
}
System.out.println(list);
}
+ Array와 ArrayList의 차이
Array와 ArrayLIst는 모든 것이 비슷하나, 가장 큰 차이점은 길이를 조정할 수 있는가 없는가이다.
자바에서 Array는 고정길이이다. 초기화시 배열의 크기를 지정한다. 또한 정해진 길이의 배열을 모두 채우면, 새로운 데이터를 추가하고 싶을 경우 새로운 배열을 만들어줘야한다.
하지만 ArrayList는 List컬렉션 인터페이스의 한 종류로 가변길이이다. 즉 동적으로 사이즈가 늘어난다. 하지만 내부적으로 Array로 구성되어 있다. ArrayList는 디폴트로 10개의 공간을 가진 배열로 시작한다. 따라서 기존 사이즈 이상으로 add()함수를 이용해 추가하려고하면 기존 배열 크기의 1.5배(기존용량 + 기존용량/2)로 resize해 새로운 배열을 만들어서 기존배열을 copy한다. 이런 원리로 ArrayList가 동적으로 크기가 늘어날 수 있는 것이다.
출처 : 자바의 정석
'Java' 카테고리의 다른 글
[Java] Stack과 Queue (1) | 2023.12.06 |
---|---|
[Java] LinkedList (1) | 2023.12.06 |
[Java] 컬렉션 프레임워크 (Collection Framework) (1) | 2023.12.06 |
[JAVA] 다차원 배열 (0) | 2023.12.06 |
[Java] String 배열 (0) | 2023.12.06 |