ArrayList의 인터페이스인 List와 Collection에 대해서는 [Java] Collection 프레임워크 게시글을 참고하세요.
ArrayList는 List 인터페이스를 구현하기 때문에, 데이터의 순서가 유지되고, 데이터의 중복이 가능하고,
c++ 언어의 vector과 유사하다.
ArrayList는 Object 배열을 이용해서 데이터를 순차적으로 저장한다.
ArrayList()
ArrayList(int initialCapacity)
ArrayList(Collection<? extends E> c)
void add(int index, E element)
index 위치에 E 추가
boolean add(E e)
맨 뒤에 E 추가
boolean addAll(int index, Collection<? extends E> c)
index 위치부터 컬렉션 c의 모든 객체를 추가
boolean addAll(Collection<? extends E> c)
맨 뒤에 컬렉션 c의 모든 객체를 추가
void clear()
모든 객체를 삭제한다.
Object clone()
Returns a shallow copy of this ArrayList instance.
boolean contains(Object o)
객체 o가 포함되어있는지 확인한다.
void ensureCapacity(int minCapacity)
ArrayList의 요양이 최소한 minCapacity가 되도록 한다.
E get(int index)
index 위치의 요소를 반환한다.
int indexOf(Object o)
객체 o와 일치하는 첫 번째 요소의 인덱스를 반환한다.
일치하는 객체가 없을 시 -1 반환
int lastIndexOf(Object o)
객체 o와 일치하는 뒤에서 첫 번째 요소의 인덱스를 반환한다.
일치하는 객체가 없을 시 -1 반환
boolean isEmpty()
ArrayList이 비어있으면 true 반환
Iterator<E> iterator()
ArrayList의 요소들을 iterator로 반환한다.
ListIterator<E> listIterator()
ArrayList의 ListIterator 반환
ListIterator<E> listIterator(int index)
ArrayList의 index 부터 시작하는 ListIterator 반환
E remove(int index)
index 위치의 요소를 삭제하고 반환한다.
boolean remove(Object o)
boolean removeAll(Collection<?> c)
ArrayList에서 객체 o 또는 컬렉션 c에 포함된 객체들을 삭제한다. (차집합)
protected void removeRange(int fromIndex, int toIndex)
위치가 fromIndex 부터 toIndex -1 인 객체들을 삭제한다.
boolean retainAll(Collection<?> c)
컬렉션 c에 포함된 객체만을 남기고 다른 객체들은 삭제한다. (교집합)
기존 컬렉션에 변화가 있으면 true 반환
E set(int index, E element)
index 위치에 요소를 저장하고 원래 있던 요소를 반환한다.
int size()
ArrayList에 저장된 객체의 개수를 반환한다.
List<E> subList(int fromIndex, int toIndex)
위치가 fromIndex 부터 toIndex -1 인 객체들을 리스트로 추출한다.
Object[] toArray()
ArrayList의 모든 요소를로 객체 배열로 반환한다.
<T> T[] toArray(T[] a)
ArrayList의 모든 요소를로 객체 배열a에 담아서 반환한다.
void trimToSize()
용량의 크기에 맞게 빈 공간을 없앤다.
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
// 형식을 Integer로 지정하고, 5, 2 요소 두개를 넣어준 ArrayList
ArrayList<Integer> list1 = new ArrayList<>(List.of(5, 2));
list1.add(4);
list1.add(0);
list1.add(3);
// 형식 지정 안한 ArrayList. Object타입이 된다.
ArrayList list2 = new ArrayList(list1.subList(1, 4));
System.out.println(list1); // [5, 2, 4, 0, 3]
System.out.println(list2); // [2, 4, 0]
Collections.sort(list1); // 정렬
list2.sort(null); // 정렬. 위 정렬과 동일 효과
System.out.println(list1); // [0, 2, 3, 4, 5]
System.out.println(list2); // [0, 2, 4]
System.out.println("list1.containsAll(list2): " + list1.containsAll(list2)); // true
list2.add("B"); // 형식 지정 안해줬으므로 Integer와 String 모두 저장 가능
list2.add("C");
list2.add(3, "A");
list2.set(1, "D");
System.out.println(list1); // [0, 2, 3, 4, 5]
System.out.println(list2); // [0, D, 4, A, B, C]
// list1에서 list2와 겹치는 부분만 남김
System.out.println("list1.retainAll(list2): " +list1.retainAll(list2)); // 변경된 부분이 있으므로 true
System.out.println(list1); // [0, 4]
System.out.println(list2); // [0, D, 4, A, B, C]
// list2에서 list1에 포함된 객체 삭제
for(int i = list2.size() - 1; i >= 0; i--) {
if (list1.contains(list2.get(i))) {
list2.remove(i);
}
}
// 인덱스를 0 부터 siez()-1 까지 증가시키며 삭제하면 삭제할 때 마다
// 빈 공간을 채우기 위해뒤의 요소들이 앞으로 당겨지기 때문에 오류가 발생한다.
// 그래서 size-1 부터 0 까지 감소시키는 방식으로 작성했다.
System.out.println(list1); // [0, 4]
System.out.println(list2); // [D, A, B, C]
// list2는 object 타입이므로 요소를 꺼내어서 사용할때 형변환 해줘야함
String s = (String) list2.get(1);
System.out.println(s + "PPLE"); // APPLE
}
}