繁体   English   中英

从哈希表中检索随机密钥

[英]Retrieve random key from Hashtable

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

但更明确地说:我有一个哈希表,其中的键是字符串(更确切地说是用户名),值是个人类,比方说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);

但这是行不通的(我因错误使用随机而报错,对不起,我现在没有详细信息)

问题一: nextInt(n)返回0到n-1范围内的值。按当前方式添加-1会导致-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实例

    List<String> l = new ArrayList<>(myHashtable.keySet());
    System.out.println(l.get(ThreadLocalRandom.current().nextInt(0, l.size())));

public int nextInt(int起源,int绑定)

返回指定原点(包含)和指定边界(不含)之间的伪随机整数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM