Я быстро написал этот фрагмент кода, чтобы сделать работуКак отобразить список KVP на Карта <Key, список <Value>> .. быстро
private void map() {
for (KVPair kvPair : content) {
String k = kvPair.getKey();
String v = kvPair.getValue();
if (mappedContent.containsKey(k)) {
List<String> values = mappedContent.get(k);
values.add(v);
} else {
List<String> values = new ArrayList<>();
values.add(v);
mappedContent.put(k, values);
}
}
}
Он работает, и когда выбежала с 1k, 2k, 4k и 8k из случайные данные, я получаю следующую производительность (в среднем 100000 прогонов)
Running with 1,000 pairs
[perfRun] 100000 iterations took 3 seconds
[perfRun] Run time: 3758786000 ns. 1 iteration takes 37 us
Running with 2,000 pairs
[perfRun] 100000 iterations took 6 seconds
[perfRun] Run time: 6675544000 ns. 1 iteration takes 66 us
Running with 4,000 pairs
[perfRun] 100000 iterations took 13 seconds
[perfRun] Run time: 13337145000 ns. 1 iteration takes 133 us
Running with 8,000 pairs
[perfRun] 100000 iterations took 27 seconds
[perfRun] Run time: 27109480000 ns. 1 iteration takes 271 us
Грубо говоря, когда размер удваивается, время удваивается. Я бы взял линейный рост, но еще не удивился, можем ли мы сделать лучше? Можно ли сопоставлять вещи с использованием постоянного времени?
Возможно, если вы сказали нам, что делаете. –
Вы пытались использовать коллекцию коллекций MultiValueMap вместо того, чтобы кататься самостоятельно? – Alb