"당신의 두뇌를 약간 훈련하는 것은 어떻습니까? 아직 제대로 작동하고 있기를 바랍니다."
"이전에 컨테이너 및 컬렉션 테이블에서 동일한 인터페이스가 여러 구현을 가질 수 있음을 확인했습니다. 이제 필요한 이유와 ArrayList가 LinkedList 와 어떻게 다른지 알려드리겠습니다. "
"컬렉션은 다양한 방식으로 구현될 수 있으며 항상 이상적인 구현은 없습니다. 어떤 접근 방식에서는 일부 작업이 빠르지만 다른 작업은 느립니다. 다른 접근 방식에서는 그 반대가 될 수 있습니다. 완벽한 단일 크기는 없습니다. 만능 솔루션."
"그래서 동일한 컬렉션의 여러 버전을 구현하기로 결정했습니다. 각 구현은 일부 좁은 작업 집합에 대해 최적화되어야 합니다. 이것이 서로 다른 컬렉션이 된 방식입니다. 예를 들어 두 클래스인 ArrayList 및 LinkedList 를 살펴보겠습니다 ."

"내부적으로 ArrayList는 일반 배열로 구현됩니다 . 그래서 중간에 요소를 삽입하려면 먼저 다음 요소를 모두 하나씩 이동한 다음 새 요소를 빈 슬롯에 넣어야 합니다. 요소 가져오기 및 설정(get, set) ) 는 이러한 작업이 단순히 관련 배열 요소를 처리하기 때문에 빠릅니다 ."
" LinkedList 는 내부 구조가 다릅니다. LinkedList는 서로 연결된 요소가 있는 목록으로 구현됩니다 . 각 요소는 목록의 다음 요소와 이전 요소에 대한 참조를 저장합니다. 이러한 목록의 중간에 요소를 삽입하려면 미래 이웃의 참조를 변경하기만 하면 됩니다. 그러나 130번 요소를 얻으려면 0에서 130까지 각 개체를 실행해야 합니다. 즉, get 및 set 작업이 느려집니다 . 다음 표를 보십시오. :"
설명 | 작업 | 배열목록 | LinkedList |
---|---|---|---|
요소 가져오기 | 얻다 | 빠른 | 느린 |
요소 설정 | 세트 | 빠른 | 느린 |
요소 추가(목록 끝에) | 추가하다 | 빠른 | 빠른 |
요소 삽입(임의의 위치에) | 추가(i, 값) | 느린 | 빠른 |
요소 제거 | 제거하다 | 느린 | 빠른 |
"그렇군요. 이제 이해하기 시작했습니다. 특정 상황에서 어떤 컬렉션이 가장 좋은지 알 수 있는 기준이나 규칙이 있나요?"
"간단하게 하기 위해 다음 규칙을 알려드리겠습니다. 컬렉션 중간에 요소를 자주 삽입(또는 제거)하려는 경우 LinkedList를 사용하는 것이 좋습니다. 다른 모든 경우에는 ArrayList가 더 잘 작동 합니다 . "
"우리는 고급 수업에서 그것들이 어떻게 구성되어 있는지 탐구할 것이지만, 지금은 그것들을 사용하는 연습을 할 것입니다."
GO TO FULL VERSION