2015-01-19 3 views
0

다음 코드는 상위 2 최대 값에 대해 동일한 인덱스를 반환 2 개 최대 값의 인덱스를 얻기 :자바 : HashMap의

HashMap<Integer, Integer> S_List = new HashMap<Integer, Integer>(); 

    S_List.put(3, 18); 
    S_List.put(9, 20); 
    S_List.put(11,20); 
    S_List.put(13,20); 
    S_List.put(15,20); 
    S_List.put(17,20); 
    S_List.put(19,20); 

    Map.Entry<Integer, Integer> maxEntry5 = null; 
    Map.Entry<Integer, Integer> maxEntry6 = null; 

    for (Map.Entry<Integer, Integer> entry : S_List.entrySet()) 
    { 
     if (maxEntry5 == null || entry.getValue() > maxEntry5.getValue()) 
     { 
      maxEntry5 = entry; 
     } 
     if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue() 
        && entry.getKey() != maxEntry5.getKey()) { 
      maxEntry6 = entry; 
     } 
    } 

가 달라야 반면 출력은 Entry5 및 Entry6 모두 = 20 17 색인. 모든 값이 같음을 사용하여 비교한다 (20)

+0

, || 이상 && 우선 순위가 있음을 명심 entry.getValue()> maxEntry6.getValue() && entry.getKey 그래서()! = maxEntry5.getKey()가 함께 평가되고 결과는 maxEntry6 == null과 OR 연산됩니다. –

답변

0

객체가있을 때

또한 측면의 문제로, 어떻게 상위 2 값이 임의의 인덱스를 얻을 수 있습니다. 값이 동일한 경우에도

if (maxEntry6 == null || 
     entry.getValue() >= maxEntry6.getValue() 
    && ! entry.getKey().equals(maxEntry5.getKey())) { 
     maxEntry6 = entry; 
    } 

, 다른 키의 값을 원하는 :

if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue() 
       && ! entry.getKey().equals(maxEntry5.getKey())) { 
     maxEntry6 = entry; 
} 

는하지만 큰 문제는 논리이다. 경우

간단한 해결책은 하나가 될 것입니다 :

if (maxEntry5 == null || 
     entry.getValue() >= maxEntry5.getValue()) { 
     maxEntry6 = maxEntry5; 
     maxEntry5 = entry; 
    }