2012-03-13 3 views
1

트리 맵에서 0,1,2,3 등의 오름차순으로 요소를 정렬했습니다.이 요소는 0,1,2 등의 값에 따라 정렬됩니다. values.I 그들을 비교하는 비교기를 사용했습니다. 나는 map.How의 끝에 0 값으로 요소를 넣으려면 제외 하고이 순서를 유지하려면 어떻게해야합니까? 당신은 "말"에 요소를 추가 할 수 있도록 완전히 무의미한 것, 그래서TreeMap의 끝 부분에 요소를 넣으십시오.

+0

그것을 당신이 한 일을하는 소리가 더 좋은 방법으로 이루어져야합니다. 예를 들어 '0'은 한 번만 나타날 수 있으므로 시작과 끝 부분에 나타나지 않습니다. 아마도 당신이해야 할 일을 분명히 할 수있을 것이고 더 간단한 해결책을 제시 할 수있을 것입니다. –

+0

나는 어떤 것을 정렬하기 위해 비교자를 사용하고 0의 값도있다.하지만 0의 값을 원한다. 내가 원하는 것. # Peter Lawrey – Azfar

+0

'0'을 사용하는 대신 왜 'Integer.MAX_VALUE'를 사용하지 않습니까? –

답변

5

0을 처리 할 수 ​​있습니다, 당신의 트리 맵에도, 정렬 TreeMaps는 그렇게 작동하지 않지만.

당신이 할 수있는 일은 "0"이 가장 큰 요소라고 결정하는 방식으로 Comparator를 구성하는 것이므로 모든 "0"을 맨 끝으로 정렬 할 것입니다. 끝에있는 "0"의 순서는 정렬 알고리즘에 따라 임의적입니다.

1

당신은 당신의 비교기를 수정하고 이미 말했듯이 가장 많은

1

이 아닌 이 아닌 맵 정렬을 원한다는 것을 깨달았습니다. 비교기는 좀 더 복잡하게 만드는 값을 얻지 못합니다.

private static Map<String, Integer> helper = new HashMap<String, Integer>(); 

private static Comparator<String> myComparator 
        = new Comparator<String>() { 
    public int compare(String s1, String s2) { 
    Integer i1 = helper.get(s1); 
    Integer i2 = helper.get(s2); 

    if (i1 == 0) return 1; // i1 > i2 
    if (i2 == 0) return -1; // i1 < i2 

    return i1.compareTo(i2); 
    } 
}; 

public static void main (String[] args) throws java.lang.Exception { 
    helper.put("minus one", -1); 
    helper.put("zero", 0); 
    helper.put("one", 1); 
    helper.put("very much", Integer.MAX_VALUE); 
    helper.put("nothing", 0); 
    helper.put("null", 0); 

    Map<String, Integer> map = new TreeMap<String, Integer>(myComparator); 
    map.putAll(helper); 

    for(Map.Entry<String, Integer> entry:map.entrySet()) { 
    System.out.printf("%s = %s%n", entry.getKey(), entry.getValue()); 
    } 
} 

출력은 : 다음 새로운 접근법은 모든 값을 수집하여 키 값을 조회하도록 상기 비교기에 의해 사용될 수있는 초 (정렬되지 않은)지도 사용

minus one = -1 
one = 1 
very much = 2147483647 
nothing = 0 
zero = 0 
null = 0 
+0

나를 도와 줄 수 있니? 나는 위의 방법을 얻을 수 없습니다 – Azfar

+0

만약 내가 여러 0이야? 나에게 중복을 허용하지 않기 때문에 "return i1.comapreTo (i2)"를 사용할 수 없습니다. 내가 사용하는 경우 (val1 Azfar

+0

및 해당 키를 있지만 "값" – Azfar

관련 문제