2013-08-24 3 views
-1

나는 개체를 포함하는 해시지도를 가지고 있는데, 다른 최대 값 (다른 방법으로 계산 됨)을 가진 3 개의 개체를 반환하는 메서드를 작성해야하는데 사용할 가장 효율적인 데이터 구조를 찾고 있습니다.해시 맵에서 최대 값 3 개를 저장하는 가장 효율적인 방법은 무엇입니까? (자바)

내가 필요로하는 것은 3 개의 정렬 된 값을 저장할 수있는 데이터 구조이며, 그 요소 중 하나보다 큰 값을 추가 할 때마다 가장 작은 값을 푸시하고 적절한 값으로 새 값을 넣습니다.

내가 설명하는 것과 비슷한 것이 있습니까, 아니면이 데이터를 저장할 새 개체를 만들어야합니까?

+0

내가 그 존재는 생각하지 않지만, 당신이 사용할 수를' 'Integer'를 추가 할 때'SortMap'을 사용합니다. –

답변

0

표준 라이브러리에는 그런 것이 없습니다.

하지만 매우 쉽게 할 수 있습니다! 크기가 4 인 배열을 만든 다음 값을 추가합니다. 3 개의 값이 있고 4 번째 값을 추가하려고하면 4 번째 값으로 추가하고 목록을 정렬하십시오. 이제 다른 값을 추가하면 언제든지 네 번째 값을 덮어 쓰고 다시 정렬 할 수 있습니다. 이 출력

import java.util.Arrays; 

public class TempTest { 

    static int[] topThree = new int[4]; 

    static public void addValue(int newVal) { 
     if (newVal > topThree[0]) { 
      topThree[0] = newVal; 
      Arrays.sort(topThree); 
     } 
    } 

    public static void main(String[] args) { 
     for (int i = 0; i < 10; i++) { 
      int newInt = (int) (Math.random() * 30); 
      System.out.println("Adding " + newInt); 
      addValue(newInt); 
      System.out.println(Arrays.toString(topThree)); 
     } 
    } 
} 

결과 : 여기

당신에게 아이디어를 제공해야합니다 아주 간단한 예제 스크립트입니다

Adding 23 
[0, 0, 0, 23] 
Adding 16 
[0, 0, 16, 23] 
Adding 2 
[0, 2, 16, 23] 
Adding 8 
[2, 8, 16, 23] 
Adding 28 
[8, 16, 23, 28] 
Adding 12 
[12, 16, 23, 28] 
Adding 0 
[12, 16, 23, 28] 
Adding 29 
[16, 23, 28, 29] 
Adding 6 
[16, 23, 28, 29] 
Adding 5 
[16, 23, 28, 29]