Tom*_*rys 52
你可以使用类似的东西:
Random generator = new Random();
Object[] values = myHashMap.values().toArray();
Object randomValue = values[generator.nextInt(values.length)];
Run Code Online (Sandbox Code Playgroud)
更新.
上面的方法不起作用,Object
总是返回一个myHashMap
s 数组,它不能被强制转换为数组Set.toArray()
.
这个(更简单的版本)确实有效:
Map<Integer,String> myHashMap = new HashMap<Integer,String>();
Run Code Online (Sandbox Code Playgroud)
如果您希望随机值是一个类型而不是Object
简单地将一个强制转换添加到最后一行.所以如果Map.Entry
被宣布为:
String randomValue = (String) values[generator.nextInt(value.length)];
Run Code Online (Sandbox Code Playgroud)
最后一行可以是:
Random generator = new Random();
Map.Entry[] entries = myHashMap.entrySet().toArray();
randomValue = entries[generator.nextInt(entries.length)].getValue();
Run Code Online (Sandbox Code Playgroud)
coo*_*ird 31
由于要求只要求来自的随机值HashMap
,这里是方法:
HashMap
具有values
返回的方法Collection
中的值的在地图中.Collection
用于创建一个List
.size
方法用于查找该方法的大小,List
该Random.nextInt
方法用于获取随机索引List
.List
get
使用随机索引从方法中检索该值.执行:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Hello", 10);
map.put("Answer", 42);
List<Integer> valuesList = new ArrayList<Integer>(map.values());
int randomIndex = new Random().nextInt(valuesList.size());
Integer randomValue = valuesList.get(randomIndex);
Run Code Online (Sandbox Code Playgroud)
关于这种方法的好处是所有方法都是通用的 - 不需要进行类型转换.
ban*_*ity 10
如果您需要从地图中绘制更多的值而不重复任何元素,您可以将地图放入List中然后随机播放.
List<Object> valuesList = new ArrayList<Object>(map.values());
Collections.shuffle( valuesList );
for ( Object obj : valuesList ) {
System.out.println( obj );
}
Run Code Online (Sandbox Code Playgroud)