treemap是按鍵的ASCII碼從小到大排序的,比如要對若干個帶有時間屬性的對象排序時,可以用時間作鍵,放到Treemap中,即是有序集合了.先不管性能,省了很多自己寫排序的實現了.
默認是按key的ASCII碼順序由小到大排序的,如果要實現自定義的排序,則要重寫treemap的比較器.
最簡單的方法就是使用集合對象自帶的方法,Collections.reverseOrder()
具體代碼如下
package com.example.commonwtf2.test; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.junit.Test; public class ExerciseTreeMap { /** * @see: 反序輸出treemap * */ @Test public void outputTreeMap(){ Map<Long, Long> tMap = new TreeMap<>(); for(long i=0;i<40;i++){ tMap.put(i, i); } int i=0; Set<Long> longSet = new HashSet<>(); for (long key : tMap.keySet()) { if (i<20) { System.out.println(key +";"+tMap.get(key)); } i++; } System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~```"); Map<Long, Long> tMapRever = new TreeMap<>(Collections.reverseOrder()); tMapRever.putAll(tMap); i=0; for (long key : tMapRever.keySet()) { if (i<20) { System.out.println(key +";"+tMapRever.get(key)); } i++; } } }
輸出結果
0;0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15;15 16;16 17;17 18;18 19;19 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``` 39;39 38;38 37;37 36;36 35;35 34;34 33;33 32;32 31;31 30;30 29;29 28;28 27;27 26;26 25;25 24;24 23;23 22;22 21;21 20;20
這樣就實現了treemap的反序輸出,逆序輸出,輸出倒數幾行等.