ArrayList

이규현·2024년 8월 8일

컬렉션 프레임워크- ArrayList

- 배열(Array)

메모리 공간에 5개의 int 타입의 공간을 생성

int[] arr = new int[5];

Arrays.toString() 을 통해 배열을 출력할 수 있다

- 배열의 데이터 추가

  1. 배열의 첫번째 위치에 추가 (addFirst())
  2. 배열의 중간 위치에 추가 (addAtIndex())
  3. 배열의 마지막 위치에 추가 (addAtIndex())
private static void addLast(int[] arr, int newValue){
 	arr[arr.length-1] = newValue;
}

private static void addFirst(int[] arr, int newValue){
    for(int i=arr.length-1 ; i>0; i--){
        arr[i] = arr[i-1];
    }
    arr[0]= newValue;
}

private static void addAtIndex(int[] arr, int index, int newValue){
   for(int i=arr.length-1; i>0; i--){
        arr[i]=arr[i-1];
   }
   arr[index] = newValue;
}

배열은 배열의 크기를 생성하는 시점에 미리 정해야 한다는 단점이 있다. 동적으로 길이를 늘리고 줄일 수 있는 자료구조인 "리스트(List)" 가 있다.

리스트

배열의 용량인 Capacity 를 상황에 따라 늘릴 수 있게 grow() 메소드 활용

public void add(Object e){
   if(size == elementData.length){
      grow();
   }
   elementData[size]=e;
   size++;
}

private void grow(){
	int oldCapacity = elementData.length;
    int newCapacity = oldCapacity *2;
    elementData = Arrays.copyOf(elementData,newCapacity);
}

Arrays.copy() 에 대한 링크: https://velog.io/@khyhlee/Arrays.copyOf

ArrayList의 단점

순서대로 마지막에 데이터를 추가/삭제할 때 성능이 좋지만, 앞이나 중간에 데이터를 추가/삭제할 때는 성능이 좋지않다.
왜 성능이 좋지 않은데? ->
--> 이를 위해 "LinkedList(링크드리스트)"를 사용한다.

LinkedList(링크드리스트): https://velog.io/@khyhlee/LinkedList

0개의 댓글