2008-11-06 3 views
2

generic.list가 배열보다 느린 이유는 무엇입니까?일반 목록과 배열 비교

+0

문법? 너는 의문의 여지가 거의 없다. –

+0

왜 시도하지 않습니까? – TcKs

+0

아마 영어가 아닌 사람에게 여유를 주어야 할 것입니다. –

답변

5

일반적인 목록은 배열보다 약간 느리지 만 대부분의 경우 알지 못합니다. 대체로 좀 더 복잡한 조회와 관련이 있습니다. 목록은 "내부적으로"배열을 사용한다고하지만, 배열에서 인접한 메모리에 노드를 유지하는 것이 보장되지는 않습니다.

그러나 2005 년에 벤치 마크 결과를 보았습니다. (지금 링크를 찾을 수 없습니다) 차이점은 입니다. 매우입니다.

또한 목록에는 배열에 비해 몇 가지 중요한 이점이 있습니다. 주로 항목을 추가하거나 제거하는 것이 간단합니다. 얼마나 많은 항목을 필요로하는지, 또는 그 수가 달라지는 지 알지 못할 때 목록을 사용하는 것이 훨씬 쉽습니다. 이러한 경우 (솔직히 말해서 일 때 대부분 ) 이 아니고은 배열을 사용해야합니다.

읽기 성능의 측면에서
+0

좋은 답변, 충분한 점수가 있기 때문에 질문을 편집 할 수 있습니다. –

+0

원래 의미가 무엇인지 충분히 확신하지 못했습니다. 그래, 나는 대답을 제공 했으니 이상하게 보일지 모르지만 잠재적으로 잘못된 대답을 주면 편집과 같은 질문이 파기되지 않는다. –

+0

글쎄, 메인 데이터 블록 (배열)은 인접 해있을 것이다. 그러나 동의한다. 아마도리스트 인스턴스와 인접하지 않을 것이다. –

2

, 두 가지 요인이 있습니다 :

  • 추가 역 참조 (즉, List<T>T[] 필드를 포함하고, 역 참조에있다)
  • 는 사용할 수 없습니다 T[] 존재 일부 컴파일러 최적화 - 같은 제거 범위는

그러나 루프 동안 검사로는, 스파링을 유지하기 때문에 특히, List<T>에 추가하는 것이 훨씬 더 쉽다 즉, 단일 요소를 추가하기 위해 전체 배열의 크기를 조정하거나 블리트 할 필요가 없습니다.