[List] ArrayList

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