Сравнение хэшей строк

 
 
 
Сообщения:1
Подскажите, с какой стороны лучше подойти к такому заданию. Итак:

Есть строка, к примеру: "989123456" //originalStr
Для этой строки есть md5 хэш: "036845ef1fd9d47c13ab3c92f48ae0f6" //originalHash

Мне необходимо в цикле пройтись от "100000000" до "999999999" (это именно строки), для каждого из этих значений высчитать md5 hash и сравнить с искомым. Если истина - выход из цикла и финиш.
Я сделал сейчас так:
Создаю byte[] origArray из originalHash.getBytes();
На каждом шаге итерации получаю md5 hash строки (100000000, 100000001 и т.д), беру getBytes() этого хэша и сравниваю с помощью Arrays.equals с origArray.
Сравнение одного миллиарда записей занимает около 11 минут.

Кто может подсказать более производительный подход? Спасибо!
 
 
Сообщения:133
Мб использовать HashMap<String,String> - key = String 100000000, Value = "036845ef1fd9d47c13ab3c92f48ae0f6" //originalHash
хранить значения всех ваших записей в мапе и потом по ключу доставать велью и сравнивать с искомым? На 1 млрд хешмапы хватит.
Изменен:13 мар 2018 16:13
 
 
Сообщения:9653
Я думаю что это просто очень много значений, с этим ничего не поделать. И ты ж не просто по массиву проходишься, а еще и хеши считаешь. У меня просто пройтись по 1G значений и сложить цифру занимает 40сек:
    @Test public void test() {
        int value = 0;
        for(int i = 0; i < 1000_000_000; i++)
            value += System.nanoTime();
        System.out.println(value);
    }
Кстати, не понятно зачем вообще хеши используешь - они нужны либо для security, либо чтоб большую строку превратить в маленькую, а у тебя вроде ничего связанного с security не видать, да и изначальная строка - меньше хеша.
vajavaja:
Мб использовать HashMap<String,String> - key = String 100000000, Value = "036845ef1fd9d47c13ab3c92f48ae0f6" //originalHash
хранить значения всех ваших записей в мапе и потом по ключу доставать велью и сравнивать с искомым? На 1 млрд хешмапы хватит.
Дак HashMap'е для этого прийдется пройтись по всем значениями и в любом случае вычислить хеш. Только при этом ей всегда прийдется проходится по всему списку чтоб заполниться изначально. Но если построить хеши нужно один раз, а проходится по ним - много раз, то это конечно хороший вариант.
Изменен:13 мар 2018 19:18
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет