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

新手上路,请多包涵

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

原文由 Varuna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

这有效:

 Random generator = new Random();
Object[] values = myHashMap.values().toArray();
Object randomValue = values[generator.nextInt(values.length)];

如果您希望随机值是 Object 以外的类型,只需在最后一行添加一个强制转换。因此,如果 myHashMap 被声明为:

 Map<Integer,String> myHashMap = new HashMap<Integer,String>();

最后一行可以是:

 String randomValue = (String) values[generator.nextInt(value.length)];


下面 不起作用Set.toArray() 总是返回一个数组 Object s,它不能被强制转换成一个数组 Map.Entry

 Random generator = new Random();
Map.Entry[] entries = myHashMap.entrySet().toArray();
randomValue = entries[generator.nextInt(entries.length)].getValue();

原文由 Tom Jefferys 发布,翻译遵循 CC BY-SA 4.0 许可协议

由于要求仅要求从 HashMap 中获取随机值,因此方法如下:

  1. HashMap 有一个 values 方法返回地图中值的 Collection
  2. Collection 用于创建 List
  3. The size method is used to find the size of the List , which is used by the Random.nextInt method to get a random index of the 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);

这种方法的好处在于所有方法都是 通用 的——不需要类型转换。

原文由 coobird 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题