Классы являются представителями коллекций Java. Различаются способом хранения ключей. TreeMap — автоматически сортирует помещённые в неё пары. Её стоит использовать там, где важен порядок хранения объектов. В HashMap сортировка ключей выполняется на основе их хэшкодов. Порядок на первый взгляд хаотичный. При выборке выигрывает TreeMap, так как в ней при поиске ключа работают алгоритмы, применяемые к упорядоченным массивам. Посмотреть как будет меняться время выборки вы можете сами, поигравшись со счётчиками циклов в коде ниже.
public class TestMaps { public static void main(String[] args) { HashMap<Integer,String> hashMap = new HashMap(); TreeMap<Integer,String> treeMap = new TreeMap(); long start; long end; long hashTime; long treeTime; for(int i=0; i<1_000_000; i++){ hashMap.put(new Integer((int)Math.random()*1000000),genRandString((int)Math.round(Math.random()*36)).toString()); treeMap.put(new Integer((int)Math.random()*1000000),genRandString((int)Math.round(Math.random()*36)).toString()); } start=System.currentTimeMillis(); for(int i=0;i<10_000_000;i++){ String s =hashMap.get(new Integer((int)Math.random()*1000000)); } end=System.currentTimeMillis(); hashTime=end-start; System.out.println("Затраченное время на перебор hashMap (ms): "+hashTime); start=System.currentTimeMillis(); for(int i=0;i<10_000_000;i++){ String s =treeMap.get(new Integer((int)Math.random()*1000000)); } end=System.currentTimeMillis(); treeTime=end-start; System.out.println("Затраченное время на перебор treeMap (ms): "+treeTime); } static StringBuilder genRandString(int lenght){ String symbols = "qwertyuiopasdfghjklzxcvbnm1234567890"; StringBuilder randString = new StringBuilder(); for(int i=0;i<lenght;i++) randString.append(symbols.charAt((int)(Math.random()*symbols.length()))); return randString; } }
Комментарии: