Java перебирает уровни hashmap 2 - PullRequest
0 голосов
/ 01 ноября 2011

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

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

    private Map<String, docInfo> m;

Я хочу перебрать все значение Double в 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 Ответ

0 голосов
/ 01 ноября 2011

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

Попробуйте

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

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

...