有没有办法在Java中随机获取HashMap的值?

Var*_*una 37 java collections hashmap

有没有办法在Java中随机获取HashMap的值?

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总是返回一个myHashMaps 数组,它不能被强制转换为数组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)

  • 嗨,您可以编辑答案,使其不包含无效部分吗?这非常令人困惑。 (2认同)

coo*_*ird 31

由于要求只要求来自的随机值HashMap,这里是方法:

  1. 所述HashMap具有values返回的方法Collection中的值的在地图中.
  2. Collection用于创建一个List.
  3. size方法用于查找该方法的大小,ListRandom.nextInt方法用于获取随机索引List.
  4. 最后,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)