HashMap和TreeMap的使用其實大同小異
只不過TreeMap在insert data時會拿data跟存在treeMap既有資料做排序比較
講到排序就讓我想到Liner Search 跟 Binary Search
所以可以推論兩者找特定key值時,HashMap平均需要花O(n)時間,TreeMap平均需要花O(logn)時間
使用者就可以看key-value設計需求有無需要頻繁的搜尋,沒有搜尋得必要就可以直接使用HashMap
public class HashMapDemo {
public static void main(String[] args) {
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("小張",40000);
hashMap.put("小李",30000);
hashMap.put("小趙",50000);
hashMap.put("小王",10000);
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
hashMap輸出:
小趙:50000
小李:30000
小王:10000
小張:40000
public class TreeMapDemo {
public static void main(String[] args) {
Map<Integer, String> treeMap = new TreeMap();
treeMap.put(40000, "小張");
treeMap.put(30000, "小李");
treeMap.put(50000, "小趙");
treeMap.put(10000, "小王");
treeMap.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
}
treeMap輸出:
小王:10000
小李:30000
小張:40000
小趙:50000
又treeMap可以透過實作Comparator介面override compare方法達到降序排序
public class TreeMapDemo {
public static void main(String[] args) {
Map<Integer, String> treeMap = new TreeMap(new DescendingSorter());
treeMap.put(40000, "小張");
treeMap.put(30000, "小李");
treeMap.put(50000, "小趙");
treeMap.put(10000, "小王");
treeMap.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
}
class DescendingSorter implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}
treeMap實作Comparator介面+ override compare方法的輸出:
小趙:50000
小張:40000
小李:30000
小王:10000