2012-09-19 2 views
2

목록의 각 요소 수를 구하는 방법은 무엇입니까?

은 무엇 a 목록에 2 회, b 한 번 c 2 번 존재 함을 인식 할 수있는 가장 효율적인 방법이 될 것입니다 (C, A, A, B, C) 무언가의 정렬 된 목록을 감안할 때?

명백한 계산지도와는 별도로. 이 일을 더 잘할 수 있을까요?

궁극적으로 목표는 목록을 반복하고 임의의 특정 시점에서 키가 몇 번 있었는지 알기위한 것입니다. 지도에 물건을 넣는 것은 우리가 실제로 필요로하지 않는 단계처럼 보입니다.

답변

1
당신의 방법은, 각 반복에서, containsKey에 대한

  • 한 조회를하게

  • INT 정수
  • 에서
  • 한 권투를 int로 정수에서
  • 하나의 언 박싱을 얻기위한 하나 개의 조회 한 번만 입력하십시오.

현재 요소를 이전 요소로 변경하고, 동일한 경우 개수를 증가시키고, 그렇지 않으면 계수를 넣습니다 (그리고 카운터를 1로 재설정).

그러나 알고리즘을 유지하더라도 get을 사용하여 결과를 null과 비교하면 불필요한 조회를 피할 수 있습니다.

+0

제안대로 모든 단계를 수동으로 작성했습니다. 최고의 실적 수치를 얻었습니다. – JAM

3

Multiset 구현을 Guava (아마도 HashMultiset)에 사용합니다. 각 반복마다 put/get을 수행하지 않아도됩니다. 추가 할 때 이미 항목이있는 경우 카운트가 증가합니다. HashMap<Foo, AtomicInteger>을 사용하는 것과 조금 비슷합니다.

자세한 내용은 Guava User's Guide entry on Multiset을 참조하십시오.

+0

예를 들어 설명해 주시겠습니까? – JAM

+0

@ Jam : 설명서를 읽었습니까? 그것은 꽤 간단합니다 ... 가세요, 그리고 당신이 붙어 있다면, 특정 작품에 대한 도움을 요청하십시오. –

+0

완벽합니다. 고마워요. – JAM

관련 문제