В чём отличие TreeMap и HashMap?​

Классы являются представителями коллекций 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;

    }
}

 

Понравилась статья? Поделиться с друзьями:

Комментарии:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: