LinkedHashMap/Set은 Collection에서 항목의 순서를 유지하므로 성능이 조금 떨어집니다. 왜 이런 일이 발생하는지 알고 싶습니다.LinkHashMap/LinkedHashSet의 반복 순서가 HashMap보다 약간 낮은 성능을내는 방법
답변
LinkedHash[Map/Set]
항목의 순서를 추적하기 위해 이중 연결된 목록을 사용하십시오. 따라서 요소가 추가 될 때마다 새 DLL 노드를 만들어야합니다. 할당에는 시간이 걸리고 몇 가지 추가 포인터를 설정해야합니다.
LinkedHashMap
/Set
두 데이터 구조를 포함하는, 삽입 및 삭제 동작은 두개의 데이터 구조의 변형을 야기하므로, 해시 테이블과 링크리스트를 간단 HashMap
touch에서 동일한 동작이 하나 명의 데이터 구조 (해시 테이블) 동안. 따라서 LinkedHashMap
/Set
은 속도가 느려지고 더 많은 메모리를 소비합니다.
질문은 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