怎么高效的从一个有几万个KEY的Map中随机获取一批数据。
时间: 2023-02-08 18:34:00 浏览: 67
可以使用随机数生成器来随机选择键, 然后使用这些键从map中获取数据。可以使用随机数生成器生成范围在0到map的大小之间的随机数, 然后使用这些随机数作为map中键的索引。这样就可以随机选择map中的若干项。
如果map中数据量非常大, 可以使用流式迭代器/批量操作来完成。
比如批量随机选取1000项, 然后再进行操作。这样可以保证效率。
相关问题
怎么高效的从一个有几万个KEY的Map中随机获取一批数据。 我需要java代码
好的,以下是Java代码示例,实现从一个有数万个KEY的Map中随机获取一批数据:
```java
import java.util.*;
public class RandomMapValues {
public static void main(String[] args) {
// 创建一个有数万个KEY的Map
Map<String, String> map = new HashMap<>();
for (int i = 0; i < 10000; i++) {
map.put("key" + i, "value" + i);
}
// 将所有的KEY存入HashSet中
Set<String> keySet = new HashSet<>(map.keySet());
// 随机获取一批数据
int batchSize = 10;
Random random = new Random();
List<String> values = new ArrayList<>();
for (int i = 0; i < batchSize; i++) {
String randomKey = keySet.toArray(new String[keySet.size()])[random.nextInt(keySet.size())];
String value = map.get(randomKey);
values.add(value);
}
System.out.println(values);
}
}
```
此代码中,我们首先创建一个有数万个KEY的Map,并将所有的KEY存储在HashSet中。然后,我们使用`Random`类生成随机数,根据随机数从HashSet中取出对应的key,再根据key从Map中取出对应的value,将所有的value存入一个`List`中,最终输出这个`List`。
怎么高效的从一个有几十万个KEY的Map中随机获取一批数据。我需要运行效率高的代码
对于有几十万个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`,以避免并发问题。
当然,具体的效率还需要根据具体的数据量和运行环境来测试。