Java перебирает уровни hashmap 2

#java #iterator #hashmap

#java #итератор #hashmap

Вопрос:

У меня есть этот класс:

     public class docInfo {
        private int freq;
        private HashMap<String, Double> m = new HashMap<String, Double>();
    }

    private Map<String, docInfo> m;
 

Я хочу перебрать все двойное значение docInfo и изменить его:

 docInfo documento;

 for (Map.Entry<String, docInfo> entry : m.entrySet()) {
            word = entry.getKey();            
            docs = entry.getValue(); // docs map


            for (Map.Entry<String, Double> entry2 : docs.getM().entrySet()){  

                score = entry2.getValue(); 
                temp = score;

                double log = Math.log10(docs.getFreq());
                double tfw = log cons;

                docs.changeScoreTo(entry2.getKey(), tfw);
                //entry2.setValue(tfw);

        }
        }
 

Он работает, проблема в том, что его выполнение занимает слишком много времени, и я думаю, что мой код не подходит для этой работы. Любая помощь будет оценена,

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

1. Сколько элементов в каждом Map ? Сколько раз вызывается этот код?

2. всего docInfo HashMap составляет 27 кб, большая часть основного hashmap содержит не более 20 объектов

Ответ №1:

Вы действительно должны использовать профилировщик, чтобы понять, почему код работает медленно. Это лучше, чем гадать. Однако, если бы мне пришлось угадывать, я бы сказал, что проблема в том, что очень большие карты (27 КБ) медленно создаются и извлекаются. Хэш-таблицы по умолчанию слишком малы для 27 тыс. записей, поэтому при сборке приходится много перефразировать.

Попробуйте

 private HashMap<String, Double> m = new HashMap<String, Double>(5000);
 

И попробуйте профилировщик, чтобы сообщить нам, какие строки потребляют циклы.