2010-01-16 3 views

답변

2

오브젝트 벡터가있는 경우 오브젝트를 복사하는 것이 비용이 많이 들기 때문에 대부분의 범용 해시 테이블은 삭제 또는 삽입시 사본이 필요없는 링크 된 목록을 사용합니다. 그러나 해시 테이블에서의 삭제는 실제로 대부분의 코드에서 드문 작업이며 삽입은 드물습니다 (긴 체인을 자르지 않으려합니다). 그래서 해시를 구현할 때마다 항상 체인에 벡터를 사용했습니다 , 전혀 문제 없습니다.

다른 설명은 연결된 목록이 사람들이 맹목적으로 접근하는 컨테이너라는 것입니다. 이에 대한 의견은 here을 참조하십시오.

+0

블로그 게시물을 구체적으로 말하고 싶습니다. 나는 이것에 대해 더 많이 듣고 싶다. –

+1

http://punchlet.wordpress.com/2009/12/27/letter-the-fourth/ –

5

당신은 벡터/ArrayList를하지만, 사용할 수 있습니다

  • 당신은 O의 목록에 인덱싱 ArrayList에 링크 된 목록이없는 것을 제공하는 기능 중 하나를 필요가 없습니다를 (1) 시각.
  • ArrayList의 용량이 현재 길이보다 커서 메모리를 낭비하는 경향이 있습니다.
  • ArrayLists는 가끔씩 용량을 늘릴 필요가 있습니다.
+1

악마 옹호자 역할 : a) 목록에 삽입 할 필요가 없습니다. b) 포인터는 요소를 삽입 할 때 업데이트해야합니다. 느립니다. c) 포인터로 인한 오버 헤드로 인해 연결된 목록은 항상 같은 크기의 배열 목록보다 크기 때문에 메모리를 낭비합니다. – meriton

+0

b) 링크 된 목록을 업데이트 할 때 하나 또는 두 개의 포인터 만 업데이트하면됩니다. arraylist를 업데이트 할 때 포인터와 카운트를 업데이트해야하므로 실제 저장은 없습니다. c) 이것은 어레이 목록에 추가 용량이없는 경우에만 해당되며, 심지어 하나의 요소가있는 목록의 경우에도 여전히 유효하지 않습니다. –

+0

@ MarkByers 안녕 마크, 여기에 내가 질문을했습니다. 우리는로드 계수를 1로하는 것이 좋겠지 만 그런 식으로 해시 테이블의 모든 LinkedList는 단 하나의 요소 만 포함 할 수 있습니다. 모든 LinkedList의 목적을 알고 있습니다. 충돌 문제,하지만 난 왜 현재 테이블의 크기가 원래 테이블 크기보다 큰 동안 같은 테이블을 재탕 필요성을 이해할 수 없습니까? 모든 LinkedList에 더 많은 요소를 저장할 수없는 이유는 무엇입니까? 도와 주실 수 있으면 감사드립니다! – Crabime

관련 문제