2012-04-08 3 views

답변

6

LinkedHash[Map/Set] 항목의 순서를 추적하기 위해 이중 연결된 목록을 사용하십시오. 따라서 요소가 추가 될 때마다 새 DLL 노드를 만들어야합니다. 할당에는 시간이 걸리고 몇 가지 추가 포인터를 설정해야합니다.

0

LinkedHashMap/Set 두 데이터 구조를 포함하는, 삽입 및 삭제 동작은 두개의 데이터 구조의 변형을 야기하므로, 해시 테이블과 링크리스트를 간단 HashMap touch에서 동일한 동작이 하나 명의 데이터 구조 (해시 테이블) 동안. 따라서 LinkedHashMap/Set은 속도가 느려지고 더 많은 메모리를 소비합니다.

1

질문은 LinkedHash [Map/Set]가 항상 링크되지 않은 상대보다 성능이 나쁘다는 잘못된 가정을하고 있습니다.

LinkedHash [Map/Set]에는 추가 또는 제거를 수행 할 때 해시 [Map/Set]보다 약간 나쁜 (여전히 일정한 시간 임에도 불구하고) 성능을 나타내는 링크 된 목록을 형성하는 데 사용되는 포인터를 유지 관리하는 추가 작업이 있습니다. LinkedHash 반복 될 때 연결되지 않은 상대의 세트 용량에 비례하는 반면

그러나 [지도/SET]을 성능 세트의 크기 비례한다. 해시 [Map/Set]를 반복 할 때 가장 좋은 시나리오는 용량이 모든 요소 (즉, 용량 = 크기)에 맞을만큼 크고 그러한 경우 동일한 성능을 갖는 경우입니다. 또한 매우 정적 인 세트/맵이없고 용량을 설정하지 않으면 용량이 크기와 같지 않을 가능성이 있습니다.

맵/세트 작성의 성능에 더 관심이 있다면 HashMap 또는 HashSet을 선택해야하지만 해당 맵/세트를 반복하는 것에 더 신경 쓰면 LinkedHashMap 또는 LinkedHashSet을 선택하십시오.

도 참조하십시오. http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html