从哈希表中检索随机密钥

好吧,我想一切都在标题中......


但为了更清楚地说明:我有一个哈希表,其中键是字符串(更准确地说:用户名),而值是个人类,比如说 UserData。所以很明显我使用这个表来检索一些知道用户名的 UserData;但有时我想取一个随机的用户名。


这就是为什么我需要找到一种方法来在我的哈希表中选择一个随机键。


我试过了:


            Random random = new Random();

            int randomIndex = random.nextInt(myHashtable.size())-1;

            String[] names = null;

            myHashtable.keySet().toArray(names);

            String randomUser = names[randomIndex];

            System.out.println(randomUser);

但它不起作用(我因 Random 使用不当而出错,抱歉我现在没有详细信息)


PIPIONE
浏览 179回答 2
2回答

侃侃无极

问题一:nextInt(n)返回 0 到 n - 1 范围内的值。-1按您目前的做法添加 a会导致 -1 到 n - 2 范围内的值(这是错误的)问题二:myHashtable.keySet().toArray(names);返回一个填充的数组keys(它不分配和填充数组)。int len = myHashtable.size();int randomIndex = random.nextInt(len);String[] names = myHashtable.keySet().toArray(new String[len]); // sizing the   // array is optional, but you have the length - and if you don't specify it   // then it will be re-computed.

哆啦的时光机

您可以在此处转换Set为List并用于ThreadLocalRandom获取范围文档之间的随机值,这种方法避免了创建实例Random&nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;l&nbsp;=&nbsp;new&nbsp;ArrayList<>(myHashtable.keySet()); &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(l.get(ThreadLocalRandom.current().nextInt(0,&nbsp;l.size())));public int nextInt(int origin, int bound)返回指定原点(包含)和指定边界(不包含)之间的伪随机 int 值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java