怎么高效的从一个有几十万个KEY的Map中随机获取一批数据。我需要运行效率高的代码
时间: 2024-02-12 20:09:53 浏览: 23
对于有几十万个KEY的Map,直接使用前面的方法可能效率不高。可以考虑使用ThreadLocalRandom,它比Random更快。同时,可以使用并行流(parallel stream)来提高获取数据的效率。以下是Java代码示例:
```java
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public class RandomMapValues {
public static void main(String[] args) {
// 创建一个有几十万个KEY的Map
Map<Integer, String> map = new HashMap<>();
for (int i = 0; i < 100000; i++) {
map.put(i, "value" + i);
}
// 随机获取一批数据
int batchSize = 100;
List<String> values = Collections.synchronizedList(new ArrayList<>());
map.keySet().parallelStream().unordered().limit(batchSize).forEach(key -> {
String value = map.get(key);
values.add(value);
});
System.out.println(values);
}
}
```
在这个例子中,我们使用了并行流和ThreadLocalRandom来提高效率。值得注意的是,我们使用了`synchronizedList`来创建一个线程安全的`List`,以避免并发问题。
当然,具体的效率还需要根据具体的数据量和运行环境来测试。