iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0

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


上一篇
SOLID設計原則 – 依賴反轉原則
下一篇
SOLID設計原則 – 里氏替換原則
系列文
寫寫歷年職場經歷過的大小事或近期所學習的知識啟發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言