ArrayList

0

Collection

목록 보기
2/11

ArrayList 란

  • ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
  • ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어있다.
  • List 인터페이스를 구현하므로, 저장순서가 유지되고, 중복을 허용한다.
  • 데이터의 저장공간으로 배열을 사용한다. (배열기반)

ArrayList의 메서드

생성자설명
ArrayList()기본 생성자
ArrayList(Collection c)매개변수로 Collection(c)를 주면 Collection을 저장하는 ArrayList를 생성
ArrayList(int initialCapacity)배열의 길이(initialCapacity)를 넣어서 길이를 지정해서 생성

ArrayList를 생성할때 충분히 공간을 지정해 주는 것이 좋다.
그렇지 않으면 공간이 부족할때 마다 배열을 생성하고 복제하는 과정을 거쳐
성능이 떨어진다.

추가

boolean add(Object o) 성공하면 true를 반환
void add(int index, Object element) index(저장위치)를 지정하여 저장할 수 있다.
boolean addAll(Collection c) 컬렉션이 가지고 있는 요소를 저장
boolean addAll(int index, Collection c) index(저장 위치)를 지정할 수 있다.

삭제

boolean remove(Object o)
Object remove(int index) 위치를 지정하여 삭제
boolean removeAll(Collection c) 컬렉션에 있는 객체(데이터)를 삭제
void clear() 모든 객체 삭제

검색

int indexOf(Object o) 객체가 몇번째에 저장되어있는지 반환, 못찾으면 -1
왼쪽에서 오른쪽으로 탐색
int lastIndexOf(Object o)
오른쪽(끝)에서 왼쪽으로 탐색
boolean contains(Object o) 객체가 존재하는지
Object get(int index) 특정 위치에 있는 객체 반환
Object set (int index, Object element) 특정 위치에 있는 객체 변경

그외 메소드

List subList(int fromIndex, int toIndex)
시작위치(from)부터 특정 위치(toIndex)까지 List를 뽑아 새로운 List 반환
Object[] toArray() ArrayList의 객체배열을 반환
Object[] toArray(Object[] a)
boolean isEmpty() 비어있는지
void trimToSize() 빈공간 제거
int size() 저장된 객체의 개수 반환

ArrayList에 저장된 객체의 삭제 과정

-ArraysList에 저장된 세 번째 데이터(data[2])를 삭제하는 과정
list.remove(2);를 호출

  1. 삭제할 데이터 아래의 데이터를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다.
  2. 데이터가 모두 한 칸씩 이동했으므로 마지막 데이터는 null로 변경한다.
  3. 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 감소 시킨다.

마지막 데이터를 삭제하는 경우, 1의 과정(배열의 복사)은 필요 없다.

주의해야할점

ArrayList에 저장된 첫 번째 객체부터 삭제하는 경우(배열 복사 발생)

for(int i=0; i<list.size(); i++){
	list.remove(i);
}

위 코드를 작동 시키면

위와 같이 나오기 때문에 삭제가 온전히 이루어지지 않는다 그렇다면 어떻게 해야할까?

ArrayList에 저장된 마지막 객체부터 삭제하는 경우(배열 복사 발생 안함)

for(int i=list.size()-1; i>=0; i--){
	list.remove(i);
}

뒤부터 삭제를 하면 위의 그림처럼 하나하나 삭제되기 때문에 완전히 삭제를 시킬 수 있다.

0개의 댓글