"당신의 두뇌를 약간 훈련하는 것은 어떻습니까? 아직 제대로 작동하고 있기를 바랍니다."

"이전에 컨테이너 및 컬렉션 테이블에서 동일한 인터페이스가 여러 구현을 가질 수 있음을 확인했습니다. 이제 필요한 이유와 ArrayList가 LinkedList 와 어떻게 다른지 알려드리겠습니다. "

"컬렉션은 다양한 방식으로 구현될 수 있으며 항상 이상적인 구현은 없습니다. 어떤 접근 방식에서는 일부 작업이 빠르지만 다른 작업은 느립니다. 다른 접근 방식에서는 그 반대가 될 수 있습니다. 완벽한 단일 크기는 없습니다. 만능 솔루션."

"그래서 동일한 컬렉션의 여러 버전을 구현하기로 결정했습니다. 각 구현은 일부 좁은 작업 집합에 대해 최적화되어야 합니다. 이것이 서로 다른 컬렉션이 된 방식입니다. 예를 들어 두 클래스인 ArrayListLinkedList 를 살펴보겠습니다 ."

ArrayList 대 LinkedList - 1

"내부적으로 ArrayList는 일반 배열로 구현됩니다 . 그래서 중간에 요소를 삽입하려면 먼저 다음 요소를 모두 하나씩 이동한 다음 새 요소를 빈 슬롯에 넣어야 합니다. 요소 가져오기 및 설정(get, set) ) 는 이러한 작업이 단순히 관련 배열 요소를 처리하기 때문에 빠릅니다 ."

" LinkedList 는 내부 구조가 다릅니다. LinkedList는 서로 연결된 요소가 있는 목록으로 구현됩니다 . 각 요소는 목록의 다음 요소와 이전 요소에 대한 참조를 저장합니다. 이러한 목록의 중간에 요소를 삽입하려면 미래 이웃의 참조를 변경하기만 하면 됩니다. 그러나 130번 요소를 얻으려면 0에서 130까지 각 개체를 실행해야 합니다. 즉, get 및 set 작업이 느려집니다 . 다음 표를 보십시오. :"

설명 작업 배열목록 LinkedList
요소 가져오기 얻다 빠른 느린
요소 설정 세트 빠른 느린
요소 추가(목록 끝에) 추가하다 빠른 빠른
요소 삽입(임의의 위치에) 추가(i, 값) 느린 빠른
요소 제거 제거하다 느린 빠른

"그렇군요. 이제 이해하기 시작했습니다. 특정 상황에서 어떤 컬렉션이 가장 좋은지 알 수 있는 기준이나 규칙이 있나요?"

"간단하게 하기 위해 다음 규칙을 알려드리겠습니다. 컬렉션 중간에 요소를 자주 삽입(또는 제거)하려는 경우 LinkedList를 사용하는 것이 좋습니다. 다른 모든 경우에는 ArrayList가 더 잘 작동 합니다 . "

"우리는 고급 수업에서 그것들이 어떻게 구성되어 있는지 탐구할 것이지만, 지금은 그것들을 사용하는 연습을 할 것입니다."