2012-03-13 21 views
1

私は0,1,2,3などの昇順で要素をソートしたツリーマップを持っています。これらの要素は値0,1,2などでソートされています私はそれらを並べ替えるためにコンパレータを使用しています。私はmap.Howの終わりに0の値を持つ要素を配置したい以外は、この順序を保持したいですか?あなたが「最後」の要素を追加することができるように、完全に無意味になるのでTreeMapの最後に要素を配置

+0

それ新しいアプローチは、ちょうどすべての値を収集し、キーの値を検索するために、コンパレータで使用可能な第2の(ソートされていない)マップを使用していますあなたがやろうとしていることのような音がより良い方法で行われるべきです。例えば、 '0'は一度しか出現しないので、最初と最後に出現できません。おそらく、あなたは何をする必要があるのか​​を明確にすることができ、より単純な解決策を考え出すことができます。 –

+0

私は何かを並べ替えるためにコンパレータを使用しています。また、0もあります。私は最後に0がほしいと思っています。@ Peter Lawrey – Azfar

+0

'0'を使用する代わりに' Integer.MAX_VALUE'を使わないのはなぜですか? –

答えて

5

として0を扱うことができますが、あなたのTreeMapであっても、ソートされていますTreeMapsはそのようには機能しませんが。

"0"が最大の要素であると判断するようにコンパレータを構成することで、すべての "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を持っている場合は? "i1.comapreTo(i2)"を返すことはできません。それは私に重複を許さないからです。私はif(val1 Azfar

+0

と私は彼らのキーではなく、それらの "値"を並べ替えています – Azfar

関連する問題