2012-03-13 93 views
1

我有一個Tree Map,其中我已經按照升序排序元素,如0,1,2,3等。這些元素按它們的值排序,即0,1,2等values.I使用比較排序他們..我想要保留這個順序,除了我想在地圖的末尾放置0值的元素。怎麼做?把元素放在TreeMap的末尾

+0

它聽起來像你試圖做的事情應該做得更好。例如,'0'只能出現一次,所以它不能出現在開始和結束處。也許你可以澄清你需要做什麼,我們可以想出一個更簡單的解決方案。 – 2012-03-13 08:20:02

+0

我正在使用一個比較器來排序,但也有0個。但是我想要0的結尾。那就是我想要的。@ Peter Lawrey – Azfar 2012-03-13 09:40:48

+0

爲什麼不使用'Integer.MAX_VALUE'來代替0? – 2012-03-13 09:42:10

回答

5

正如你已經說過,你TreeMap的排序,所以這將是完全懵了,讓你的一個元素的「結束」追加,甚至儘管TreeMaps不能以這種方式工作。

你可以做的是配置你的比較器的方式,它決定「0」是最大的元素,所以他會將所有「0」排序到最後。 請注意,最後「0」的順序是隨機的,具體取決於排序算法。

1

您可以修改您的比較和治療0作爲國內最大的數字

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 2012-03-13 10:29:43

+0

如果我有多個0,該怎麼辦?我將無法使用「返回i1.comapreTo(i2)」,因爲它不允許我複製。我正在使用if(val1 Azfar 2012-03-13 10:49:29

+0

並且我排序不在他們的鑰匙上,而是在他們的「值」上 – Azfar 2012-03-13 10:50:40