그 외 ... (정리해야함)/질문과 답변

배열과 리스트의 관계를 알아보자.

깡냉쓰 2019. 5. 2. 17:00
728x90
반응형

리스트

  • 정렬된 컬렉션
  • List 인터페이스를 사용

배열과 리스트의 관계

배열

  • JVM은 배열이 생성될 때 반드시 배열의 크기를 알아야 한다.

    final String[] stringArray = new String[3]; 
  • 배열의 원소에는 인덱스 값을 이용해서 직접 접근할 수 있다.(랜덤 접근 Random Access)

  • 배열 전체를 사용 중일 때 원소를 추가하려면 배열 크기를 늘려야 한다.

    • 배열 복사 후 새로운 배열이 원본 배열의 주소를 가리키도록 재할당

    • @Test
      public void arrayCopy(){
        int[] integers = {0, 1, 2, 3, 4};
      
      int[] newIntegersArray = new int[integers.length + 1];
      System.arraycopy(integers, 0, newIntegersArray, 0, integers.length);
      integers = newIntegersArray;
      integers[5] = 5;
      assertEquals(5, integers[5]);
      }

리스트

  1. ArrayList
    • 배열로 구성되어 있으며, 원소로 가득찬 배열에 새로운 원소를 추가할 때마다 자동으로 더 큰 배열을 재할당 한다.
    • 원소를 많이 삭제해도 배열 크기는 줄어들지 않는다. (원소의 개수가 변경되는 리스트라면 최적의 선택이 아님)
    • 인덱스를 사용하여 원소에 랜덤 접근할 수 있다.
  2. LinkedList
    • 원소의 개수가 계속 변경되는 상황에서 유리함
    • 배열로 구성되어 있지 않으며, 리스트 안에서 다음 원소를 가리키는 내부 객체를 이용한다.
    • 인덱스를 이용해 ㅅ원소에 접근할 경우 해당 인덱스에 접근할때까지 리스트를 순회해야 함
    • ArrayList클래스에서 배열 재할당 과정으로 인해 발생하는 손실을 막아준다.
    • 리스트 크기가 작아지면 메모리 용량 역시 작아진다. (Stack 처럼 특수한 자료구조를 만들었다면 자료구조로 LinkedList클래스를 사용하는 것이 좋다.)
728x90
반응형