java如果在一个给定的map中取出随机的一个键值对呢?
首先测试一下, 先写一个map做测试用, 当然是我们最喜欢的4am啦:
import java.util.*;
class Untitled {
public static void main(String[] args) {
Map<String ,String> a = new HashMap<>();
a.put("0", "godv");
a.put("1", "mifengaaa");
a.put("2", "aluka");
a.put("3", "gucun");
a.put("4", "cpt");
a.put("5", "forever");
a.forEach((k,v)->{
System.out.println(k+"=>"+v);
});
}
}
//0=>godv
//1=>mifengaaa
//2=>aluka
//3=>gucun
//4=>cpt
//5=>forever
- 时间换空间, 生成随机数用遍历次数做随机取值:
Random rnd = new Random();
rnd.setSeed(new Date().hashCode());
final int d = rnd.nextInt(a.size());
int x = 0;
Iterator<Map.Entry<String, String>> it = a.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> itt = it.next();
if(x++ == d){
System.out.println(itt.getKey()+"=>"+itt.getValue());
}
}
- 空间换时间, 先存储KeySet然后做随机取key值
ArrayList<String> b = new ArrayList<>(a.size());
a.forEach((k,v)->{
b.add(k);
});
Random rnd = new Random();
rnd.setSeed(new Date().hashCode());
final int d = rnd.nextInt(a.size());
System.out.println(b.get(d)+"=>"+a.get(b.get(d)));
在json里面做的取随机对的时候也可以这么做~你懂我意思吧!