TreeMap还是HashMap更快?
TreeMap还是HashMap更快?
本问题已经有答案::
我正在编写一个字典,它在Map <String,Index>
中大量使用String作为键。我的关注点是在地图中搜索键的 HashMap
和 TreeMap
哪一个会导致更好(更快)的性能?
admin 更改状态以发布 2023年5月20日
public class MapsInvestigation { public static HashMaphashMap = new HashMap (); public static TreeMap treeMap = new TreeMap (); public static ArrayList list = new ArrayList (); static { for (int i = 0; i < 10000; i++) { list.add(Integer.toString(i, 16)); } } public static void main(String[] args) { System.out.println("Warmup populate"); for (int i = 0; i < 1000; i++) { populateSet(hashMap); populateSet(treeMap); } measureTimeToPopulate(hashMap, "HashMap", 1000); measureTimeToPopulate(treeMap, "TreeMap", 1000); System.out.println("Warmup get"); for (int i = 0; i < 1000; i++) { get(hashMap); get(treeMap); } measureTimeToContains(hashMap, "HashMap", 1000); measureTimeToContains(treeMap, "TreeMap", 1000); } private static void get(Map map) { for (String s : list) { map.get(s); } } private static void populateSet(Map map) { map.clear(); for (String s : list) { map.put(s, s); } } private static void measureTimeToPopulate(Map map, String setName, int reps) { long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { populateSet(map); } long finish = System.currentTimeMillis(); System.out.println("Time to populate " + (reps * map.size()) + " entries in a " + setName + ": " + (finish - start)); } private static void measureTimeToContains(Map map, String setName, int reps) { long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { get(map); } long finish = System.currentTimeMillis(); System.out.println("Time to get() " + (reps * map.size()) + " entries in a " + setName + ": " + (finish - start)); } }
得到以下结果:
Warmup populate Time to populate 10000000 entries in a HashMap: 230 Time to populate 10000000 entries in a TreeMap: 1995 Warmup get Time to get() 10000000 entries in a HashMap: 140 Time to get() 10000000 entries in a TreeMap: 1164